ウィンドウに切り替える前にウィンドウがロードされるのを待つためのAPI、または新しいウィンドウにウィンドウタイトルが存在するAPIはありますか? フレームを利用できるようにするための ExpectedConditions.frameToBeAvailableAndSwitchToIt がありますが、ウィンドウにも同等のものがあると、作業が楽になります。どんな反応でも大歓迎です。ありがとう。
1189 次
2 に答える
2
私はこのアプローチを使用します:
/**
* Wait for an emergent windows to be present.
*/
public final void waitForWindowsPresent() {
WebDriverWait wait = new WebDriverWait(getDriverProvider().get(),
TIMEOUT);
wait.until(new Predicate<WebDriver>() {
public boolean apply(final WebDriver d) {
return getDriverProvider().get().getWindowHandles().size() > 1;
}
});
}
windowHandles の数が 1 より大きいかどうかを確認しますが、さらに多くのウィンドウを開くことが予想される場合は、windowHandles の状態を保存してから比較することができます。
于 2012-10-15T17:50:13.537 に答える
1
私はここに似たようなものを投稿しました:
コードはgroovyですが、groovyはかなり読みやすいので、別の言語でやり直すのは簡単です。FF、IE、Chromeで幅広く使用しました。
使用法は次のようなものでした:
def url = "/page/ContactUs"
if (!selectWindow(serverBaseUrl + url)) {Log.Error("Cannot get to Contact Us")}
そして、あなたがページ上で何かを待つ必要がある場合:
public boolean waitOnXPathDisplayed(String xpath) {
int tries = 0;
while (true) {
try {
Log.logger.info("Trying to find element " + xpath + ", try = " + tries)
WebElement el = driver.findElement(By.xpath(xpath))
if(el.isDisplayed()) {
Log.logger.info("Found element")
return true
} else {
Log.logger.info("Element not displayed yet")
tries++
Thread.sleep(1000)
}
if (tries > 20) {
Log.logger.error("Timeout")
return false
}
} catch (Exception ex) {
Log.logger.info("Exception while trying to find element")
tries++
Thread.sleep(1000)
if (tries > 20) {
Log.logger.error("Timeout")
return false
}
}
}
}
次のような使用法で:
waitOnXPathDisplayed("//div[@id='some div id']/ul[1]/li[3]")
于 2012-06-05T21:39:29.820 に答える