waitForCondition丢失了;在声明错误之前

时间:2010-12-02 18:59:10

标签: selenium selenium-webdriver

我查看了所有示例,使用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");

现在我收到错误:遗失;在陈述之前

1 个答案:

答案 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);
    }
}