selenium web驱动程序 - 如何使用waitFor for AJAX

时间:2012-05-04 19:29:30

标签: selenium selenium-webdriver

我正在尝试在测试脚本中的每个Web元素之前添加显式等待

我的代码有

import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;
                     .
                     .
WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(presenceOfElementLocated(By.id("name")));

driver.findElement(By.id("name")).clear();
driver.findElement(By.id("name")).sendKeys("Create_title_01");

我看到的错误是:

    java.lang.NullPointerException
at org.openqa.selenium.support.ui.FluentWait$1.apply(FluentWait.java:176)
at org.openqa.selenium.support.ui.FluentWait$1.apply(FluentWait.java:1)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:201)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:174)

由于

3 个答案:

答案 0 :(得分:5)

使用 presenceOfElementLocated 和其他AjaxCondition方法

你应该使用

  

org.openqa.selenium.support.ui.ExpectedConditions

类。你的代码应该是这样的:

wait.until(ExpectedConditions.presenceOfElementLocated(By.id("name")));

答案 1 :(得分:0)

我建议使用waitForElementPresent或waitForElementNotPresent,具体取决于您的AJAX调用事件。

但是,如果您仍然喜欢使用wait.until,我就是这样做的(并且有效)

wait = new WebDriverWait(wedriver1, TimeSpan.FromSeconds(5));
.....
button.Click();
wait.Until(webdriver1 => webdriver2.webelement.GetAttribute("style").Contains("display: block"));

我在Until方法采用的条件下给出了属性更改的示例。你可以做点什么..

driver.findElement(By.id(“name”))。显示(对于wait.until中的条件。

答案 2 :(得分:0)

WebDriverWait wait初始化后,您似乎需要以下一行:

wait.ignoring(NoSuchElementException.class);