例外を処理する方法が示されていないため、Pavel Zorinsの回答がうまくいくことに同意しません。
ここでは、iFrameを待つ方法を説明します。
public class IFrame1 extends LoadableComponent<IFrame1> {
private RemoteWebDriver driver;
@FindBy(id = "iFrame1TextFieldTestInputControlID")
public WebElement iFrame1TextFieldInput;
@FindBy(id = "iFrame1TextFieldTestProcessButtonID")
public WebElement copyButton;
public IFrame1(RemoteWebDriver drv) {
super();
this.driver = drv;
this.driver.switchTo().defaultContent();
waitTimer(1, 1000);
this.driver.switchTo().frame("BodyFrame1");
LOGGER.info("IFrame1 constructor...");
}
@Override
protected void isLoaded() throws Error {
LOGGER.info("IFrame1.isLoaded()...");
PageFactory.initElements(driver, this);
try {
assertTrue("Page visible title is not yet available.", driver
.findElementByCssSelector("body form#webDriverUnitiFrame1TestFormID h1")
.getText().equals("iFrame1 Test"));
} catch (NoSuchElementException e) {
LOGGER.info("No such element.");
assertTrue("No such element.", false);
}
}
@Override
protected void load() {
LOGGER.info("IFrame1.load()...");
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class)
.ignoring(StaleElementReferenceException.class) ;
wait.until(ExpectedConditions.presenceOfElementLocated(
By.cssSelector("body form#webDriverUnitiFrame1TestFormID h1")));
}
....
は注:することができますsee my entire working example hereこれはあなたのJUnitテストクラスは、ページオブジェクトにRemoteWebDriverのインスタンスを渡す必要があります。
あなたの提案をありがとう、私が間違っている場合は、私はdriver.get( "http://www.rambler.ru"の後に要素を待つ使用することをお勧めします。 WebDriverはdriver.get()がページの読み込みを終了して要素待機に行くまで待機しますか? –
webdriverは常にページの読み込みを待ちます。あなたの質問を間違って理解しているかもしれません。この場合、get( "rambler.ru")を呼び出してロード時間が30秒を超えた場合(例のように)、TimeoutExceptionをスローすると、カウントを開始するtimerを使用できます。 –
私はそれを意味します:http:// stackoverflow .com/a/6107997/1165331 –