14

以下のコード スニペットは正常に動作しますが、次のwait.until()行に少し問題があります。

wait.until(new ElementPresent(By.xpath("//a[@title='Go to Google Home']")));

PageFactory WebElement homePageLink動作しますが、代わりに送信したい:

wait.until(new ElementPresent(homePageLink));

それを行う方法はありますか?

これらの新しい Selenium 2 の機能については、少し頭が混乱してしまい、多くのドキュメントを見つけることができません。

ありがとう。

public class GoogleResultsPage extends TestBase {

    @FindBy(xpath = "//a[@title='Go to Google Home']")
    @CacheLookup
    private WebElement homePageLink;

    public GoogleResultsPage() {  
        wait.until(new ElementPresent(By.xpath("//a[@title='Go to Google Home']")));
        assertThat(driver.getTitle(), containsString("Google Search"));
    }  
}

public class ElementPresent implements ExpectedCondition<WebElement> {

    private final By locator;

    public ElementPresent(By locator) {
        this.locator = locator;
    }

    public WebElement apply(WebDriver driver) {
        return driver.findElement(locator);
    }
}
4

3 に答える 3

21

PageFactoryAjaxElementLocatorFactoryで使用します-PageFactoryは、使用しているSelenium 2ページオブジェクトパターンのサポートクラスであり、AjaxElementLocatorFactoryは要素ロケーターのファクトリです。あなたの場合、コンストラクターは次のようになります。

public GoogleResultsPage() { 
    PageFactory.initElements(new AjaxElementLocatorFactory(driver, 15), this);
}

このコードは、注釈で指定された要素がページに表示されるまで最大15秒待機します。この場合、xpathによって配置されるhomePageLinkです。ElementPresentクラスを使用する必要はありません。

于 2010-07-19T10:22:01.050 に答える
1

AjaxElementLocatorFactory は内部で SlowLoadableComponent を使用します。ここでソースコードを確認してください

于 2013-02-04T11:40:48.443 に答える