selenium验证由AJAX填充的html表中的文本

selenium验证由AJAX填充的html表中的文本,selenium,Selenium,我正在使用Selenium的FireFox WebDriver。我有一个通过AJAX加载的窗口,因此我的测试不一致 我可以在线程上延迟3秒,并且每次都能正常工作。我所做的就是检查是否有争吵 最好的方法是什么?假设你的硒测试应该模拟一个人使用该网站,因此你所做的任何规避人类会做的事情(坐着等待)都可能导致错误的结果。在这种情况下,我认为在AJAX加载(或失败)时添加延迟并报告没有问题。假设您的Selenium测试应该模拟一个人使用该站点,因此您所做的任何规避人类会做的事情(静坐等待)都可能导致错误

我正在使用Selenium的FireFox WebDriver。我有一个通过AJAX加载的窗口,因此我的测试不一致

我可以在线程上延迟3秒,并且每次都能正常工作。我所做的就是检查是否有争吵


最好的方法是什么?

假设你的硒测试应该模拟一个人使用该网站,因此你所做的任何规避人类会做的事情(坐着等待)都可能导致错误的结果。在这种情况下,我认为在AJAX加载(或失败)时添加延迟并报告没有问题。

假设您的Selenium测试应该模拟一个人使用该站点,因此您所做的任何规避人类会做的事情(静坐等待)都可能导致错误的结果。在这种情况下,我认为在AJAX加载(或失败)时添加延迟,然后报告这一点没有问题。

最好的方法(IMHO)是使用fluent wait。 无论如何,您有所需元素的定位器(XPath或css选择器等),并将定位器传递给fluentWait函数,您将获得所需的web元素进行交互。
fluentWait
功能代码如下:

public WebElement fluentWait(final By locator){
        Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
                .withTimeout(30, TimeUnit.SECONDS)
                .pollingEvery(5, TimeUnit.SECONDS)
                .ignoring(NoSuchElementException.class);

        WebElement foo = wait.until(
new Function<WebDriver, WebElement>() {
            public WebElement apply(WebDriver driver) {
                        return driver.findElement(locator);
                }
                }
);
                           return  foo;              }     ;
您将传递到函数:

   WebElement firstRow= fluentWait(By.cssSelector(cssLocator));
通过这种方式,您可以获得表的第一行

希望你现在明白了)

最好的方法(IMHO)是使用fluent wait。 无论如何,您有所需元素的定位器(XPath或css选择器等),并将定位器传递给fluentWait函数,您将获得所需的web元素进行交互。
fluentWait
功能代码如下:

public WebElement fluentWait(final By locator){
        Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
                .withTimeout(30, TimeUnit.SECONDS)
                .pollingEvery(5, TimeUnit.SECONDS)
                .ignoring(NoSuchElementException.class);

        WebElement foo = wait.until(
new Function<WebDriver, WebElement>() {
            public WebElement apply(WebDriver driver) {
                        return driver.findElement(locator);
                }
                }
);
                           return  foo;              }     ;
您将传递到函数:

   WebElement firstRow= fluentWait(By.cssSelector(cssLocator));
通过这种方式,您可以获得表的第一行

希望你现在明白了)