是否有一个 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 回答