我查看了所有示例,使用waitForCondition时仍然存在问题。这是我的代码。
WebDriverBackedSelenium seleniumWD = new WebDriverBackedSelenium(driver, "http://www.x.com");
seleniumWD.waitForCondition("seleniumWD.isElementPresent(\"fullname\");", "5000");
我收到错误:未定义seleniumWD。所以我把它改成了:
WebDriverBackedSelenium seleniumWD = new WebDriverBackedSelenium(driver, "http://www.x.com");
seleniumWD.waitForCondition("boolean ok = seleniumWD.isElementPresent(\"fullname\");", "5000");
现在我收到错误:遗失;在陈述之前
答案 0 :(得分:1)
您似乎正在使用基于Selenium 2 / WebDriver的测试中的Selenium JS对象。您应该使用WebDriver提供的ExpectedCondition和Wait类,而不是使用WebDriverBackedSelenium。在您的情况下,假设fullname
是您正在等待的元素的id,您的代码应如下所示:
WebElement element;
ExpectedCondition<Boolean> e = new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
element = d.findElement(By.id("fullname"));
return Boolean.TRUE;
}
};
Wait<WebDriver> w = new WebDriverWait(driver, timeOutInSeconds);
w.until(e);
这是一段非常重要的代码,因此您应该考虑使用Page Objects pattern,这是编写Selenium测试的最佳实践之一。包含您的字段的示例页面将是这样的:
public class MyPage {
@FindBy(id="fullname")
private WebElement fullName;
public MyPage(WebDriver driver) {
PageFactory.initElements(new AjaxElementLocatorFactory(driver, 15), this);
}
public void setFullName(String value) {
fullName.clear();
fullName.sendKeys(value);
}
}