2

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

我可以在线程上延迟 3 秒,它每次都有效。我所做的只是检查一行的存在。

最好的方法是什么?

4

2 回答 2

0

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

于 2012-10-01T16:08:57.493 回答
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 是否返回。

一些关于流利等待的添加信息你可以在这里阅读

认为

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

你传递给函数:

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

并以这种方式获得表格的第一行。

希望你现在清楚了)

于 2012-10-01T16:13:30.390 回答