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

时间:2012-10-01 16:03:48

标签: selenium

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

我可以在线程上延迟3秒,每次都可以使用。我正在做的就是检查一行的现状。

最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

据推测,您的Selenium测试应该模拟使用该网站的人,因此您所做的任何事情都可以规避人类的行为(坐下等待),这可能会导致错误的结果。在这样的情况下,我发现在AJAX加载(或失败)然后报告它时添加延迟没有问题。

答案 1 :(得分:0)

最好的方式(恕我直言)是用流利的等待。 无论如何,你有所需元素的定位器(xpaths或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;              }     ;

重要的是要注意每个FluentWait实例定义等待条件的最大时间量,以及检查条件的频率。此外,用户可以将等待配置为在等待时忽略特定类型的异常,例如在页面上搜索元素时的NoSuchElementExceptions。(c)selenium API文档

所以你可以设置
.pollingEvery(1,TimeUnit.SECONDS)
并且在此间隔期间将验证您的AJAX是否已返回。

一些添加有关流利等待的信息,您可以阅读here

假设

String cssLocator=...blablabla..  // is the css of the table row

你传递给函数:

   WebElement firstRow= fluentWait(By.cssSelector(cssLocator));

以这种方式获得你桌子的第一行。

希望现在你明白了这一点)