没有窗口的ExpectedConditions

时间:2012-06-05 18:29:40

标签: selenium selenium-webdriver

在切换到窗口之前是否有等待窗口加载的api或新窗口中是否存在窗口标题? 我们有一个可用的框架的ExpectedConditions.frameToBeAvailableAndSwitchToIt,但是如果我们有一个等效的窗口也会让生活更轻松。 任何回应都会非常感激。感谢。

2 个答案:

答案 0 :(得分: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的状态,然后与之比较。

答案 1 :(得分:1)

我发布了类似的内容:

Wait For Window By URL with Timeout Value

代码是groovy,但groovy很可读,所以用另一种语言重做它应该很容易。我广泛使用它与FF,IE和&amp;铬。

用法如下:

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]")