Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 窗口的预期条件不可用_Selenium_Selenium Webdriver - Fatal编程技术网

Selenium 窗口的预期条件不可用

Selenium 窗口的预期条件不可用,selenium,selenium-webdriver,Selenium,Selenium Webdriver,是否有api用于在切换到窗口之前等待加载窗口,或在新窗口中显示窗口标题? 我们希望Conditions.FrameToBeavailable和SwitchToIt可以使用一个框架,但是,如果我们也有一个用于窗口的同等框架,则会使生活更轻松。 如有任何回复,将不胜感激。谢谢。我在这里发布了类似的内容: 代码在groovy中,但是groovy可读性很好,所以用另一种语言重做应该很容易。我将其广泛用于FF、IE和Chrome 用法类似于: def url = "/page/ContactUs" if

是否有api用于在切换到窗口之前等待加载窗口,或在新窗口中显示窗口标题? 我们希望Conditions.FrameToBeavailable和SwitchToIt可以使用一个框架,但是,如果我们也有一个用于窗口的同等框架,则会使生活更轻松。
如有任何回复,将不胜感激。谢谢。

我在这里发布了类似的内容:

代码在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]")

我在这里发布了类似的内容:

代码在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]")
我使用这种方法:

/**
 * 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;
        }
    });
}
/**
*等待出现紧急窗口。
*/
公共最终作废waitForWindowsPresent(){
WebDriverWait wait=新建WebDriverWait(getDriverProvider().get(),
超时);
wait.until(新谓词(){
公共布尔应用(最终WebDriver d){
返回getDriverProvider().get().getWindowHandles().size()>1;
}
});
}
我检查windowHandles的数量是否大于1,但如果您希望打开更多窗口,可以保存windowHandles的状态,然后与之进行比较。

我使用这种方法:

/**
 * 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;
        }
    });
}
/**
*等待出现紧急窗口。
*/
公共最终作废waitForWindowsPresent(){
WebDriverWait wait=新建WebDriverWait(getDriverProvider().get(),
超时);
wait.until(新谓词(){
公共布尔应用(最终WebDriver d){
返回getDriverProvider().get().getWindowHandles().size()>1;
}
});
}

我检查windowHandles的数量是否大于1,但是如果您希望打开更多的窗口,可以保存windowHandles的状态,然后与之进行比较。

windows的情况与框架的情况相同。你对框架做了什么?它对windows和框架都是一样的。你为镜框做了什么?嗨,克里斯,谢谢你的回复。我看到的waitOnXPathDisplayed的问题是,在运行测试时使用Thread.sleep会导致其他类型的问题。我使用Thread.sleep给浏览器提供了继续加载的时间。您可能想在不睡觉的情况下尝试一下,但我希望测试会干扰浏览器。我甚至在windows app automation中使用了这种类型的构造,我可以在其中使用事件处理程序,但每次注册、回调等都需要额外的代码,这让我望而却步。嗨,克里斯,谢谢你的回复。我看到的waitOnXPathDisplayed的问题是,在运行测试时使用Thread.sleep会导致其他类型的问题。我使用Thread.sleep给浏览器提供了继续加载的时间。您可能想在不睡觉的情况下尝试一下,但我希望测试会干扰浏览器。我甚至在windows app automation中使用了这种类型的构造,我可以在其中使用事件处理程序,但每次注册、回调等的所有额外代码都使其无法使用。