0

すべての例を見てきましたが、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");

そして今、私はエラーを受け取ります: 行方不明; ステートメントの前に

4

1 に答える 1

1

Selenium 2/WebDriverベースのテストのSeleniumJSオブジェクトを使用しているようです。WebDriverBackedSeleniumを使用する代わりに、WebDriverが提供するExpectedConditionクラスとWaitクラスを使用する必要があります。あなたの場合、があなたが待っている要素のIDであると仮定するとfullname、あなたのコードは次のようになります:

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);

これは非常に大きなコードであるため、Seleniumテストを作成するためのベストプラクティスの1つであるページオブジェクトパターンの利用を検討する必要があります。フィールドを含むサンプルページは次のようになります。

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);
    }
}
于 2010-12-07T11:03:27.413 に答える