1

最初は空のiframeがあり、その後、ページでの操作の過程で要素が動的にiframeに読み込まれます。ワークフローの次のステップに進むには、これらの要素の1つにアクセスする必要があります。私は次のコードを使用します:-

driver.switchTo().frame(iframeElement);  
Wait wait = new FluentWait(driver).withTimeout(30,TimeUnit.SECONDS).
 pollingEvery(2,TimeUnit.SECONDS).ignoring(NoSuchElementException.class);

WebElement pluginTwitterButton = wait.until(new Function() {
  public WebElement apply( WebDriver driver ) { 
    return driver.findElement( By.id("twitter") ); 
  } 
});

後でpluginTwitterButton.click();を実行する必要があります。

しかし、次のエラーが発生します-org.openqa.selenium.TimeoutException:xxx.xxx.TestCaseSampleReply $ 1 @ 1217e615を待機して30秒後にタイムアウトしましたビルド情報:バージョン: '2.25.0'、リビジョン: '17482'、時間: ' 2012-07-18 21:08:56'システム情報:os.name:' Linux'、os.arch:' amd64'、os.version:' 3.2.0-32-generic'、java.version:' 1.6 .0_24'原因:org.openqa.selenium.NoSuchElementException:要素が見つかりません:{"method": "id"、 "selector": "twitter"}コマンドの継続時間またはタイムアウト:30.03秒

私はfirefoxドライバー、selenium webdriver jar v.2.25.0を使用しています-firefoxdriverの実行時にクリックする必要のある要素が目に見えますが、何らかの理由でiframe変数が更新されません。ここで何が欠けていますか?

4

1 に答える 1

2

この投稿から、これを試すことができます:

driver.switchTo().frame(iframeElement);
Thread.sleep(2000); // time to load new iframe DOM
WebElement myElement = fluentWait(By.cssLocator(myLocator));

この方法の使用:

public WebElement fluentWait(final By locator) {
    Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
            .withTimeout(30, TimeUnit.SECONDS)
            .pollingEvery(5, TimeUnit.SECONDS)
            .ignoring(NoSuchElementException.class, StaleElementReferenceException.class );

    WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
        public WebElement apply(WebDriver driver) {
            return driver.findElement(locator);
        }
    });

    return  foo;
};
于 2013-07-03T15:02:43.910 に答える