当前位置: 首页 > 面试题库 >

等待页面元素(xpath)在Selenium Webdriver中显示的最有效方法是什么?

陆洲
2023-03-14
问题内容

我正在使用Java和Selenium Webdriver来测试单页Web应用程序的功能。

因此,很明显,元素是动态注入和从DOM中删除的。

我知道我可以使用使用WebDriverWait的类似代码等待元素出现在DOM中(我写的非常整洁的模板稍微改变了GitHub):

public void waitForElement() throws Exception {
    /*
    Inject the following snippet in any web page to test the method
    <button class="i-am-your-class" onclick="alert('Wow, you pressed the button!');">Press me</button>
     */
    System.setProperty("webdriver.gecko.driver", "C:\\Program Files (x86)\\Mozilla Firefox\\geckodriver.exe");
    WebDriver driver = getDriver();
    WebDriverWait wait = new WebDriverWait(driver, 10); // 10 can be reduced as per Test Specifications
    driver.get("http://www.google.com");
    WebElement response = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@class='i-am-your-class']")));
    response.click();
    System.out.println("*****************************************************************************");
    System.out.println(response);
    System.out.println(response.getText());

    driver.close();
}

我想知道的是,这是否也是使用xpath获得此类结果的更有效方法。

感谢您的时间和帮助。


问题答案:

您需要考虑以下两个事实:

  • WebDriverWait()100 不应该是一个实时的服务员。考虑根据 测试规范 降低它。例如,将其设置为10秒:

    WebDriverWait wait = new WebDriverWait(driver, 10);
    
  • 展望未来,你正在调用click()的方法,从而代替 ExpectedConditionsvisibilityOfElementLocated()方法使用 elementToBeClickable() 方法如下:

    WebElement response = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@class='i-am-your-class']")));
    
  • 优化您的 xpath( 包括中的 tagNameBy.xpath("//tagName[@class='i-am-your-class']")。举个例子 :

    By.xpath("//a[@class='i-am-your-class']")
    
  • 优化您的代码以click()通过 WebDriverWait 返回元素时立即调用,如下所示:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='i-am-your-class']"))).click();
    


 类似资料:
  • 我正在使用Android Espresso Web测试Android应用程序中的Web视图。它需要一些时间来完成与加载网站。在对元素执行单击操作之前,我需要等待它显示出来。我能用什么API吗?我不想使用sleep()方法。

  • 如果我的问题听起来很重要,我事先道歉,我在质量保证和硒方面是新手。 我正在使用Java和Selenium编写测试,有时我需要等待web元素被访问,下面是我以前使用的代码片段: 但现在我在某处看到: 第二个当然短得多,但我不知道它是否更好,换句话说,它们是否不同?如果是,如何?哪一个更好?

  • 我实际上有三个问题: Selenium WebDriver如何实现此 因为我们不能给无限睡眠的线程一个负值。 有没有更好的方法来实现无限等待? 我们在SeleniumWebDriver文档中看到了这一点

  • 问题内容: 最近,我一直在做很多模态窗口弹出窗口,而我没有使用jQuery。我用来在页面上创建新元素的方法绝大多数都是这样的: 但是,我感到这不是执行此操作的最佳或最有效的方法。从性能的角度来看,在jQuery中创建元素的最佳方法是什么? 问题答案: 我使用基准测试表明该技术是最快的。我推测这是因为jQuery不必将其标识为元素并创建元素本身。 您应该真正使用不同的Javascript引擎运行基准

  • 我需要从Python 2.7中的对象列表中删除前n个元素。有没有一种不使用循环的简单方法?

  • 本文向大家介绍JQuery显示隐藏页面元素的方法总结,包括了JQuery显示隐藏页面元素的方法总结的使用技巧和注意事项,需要的朋友参考一下 在jquery中显示隐藏div方法方法有很多种,如比较简单的函数show(),hide(),toggle(),slideDown()然后还有css设置div的style属性都可操作,下面我来介绍。 show()方法 显示出隐藏的 <p> 元素。 toggle(