等待脚本完成,然后切换到硒框架

时间:2018-06-25 14:06:20

标签: javascript java jquery selenium

我正在尝试切换到iframe,但是,在切换之前,我必须等待脚本完成。

就像我在这里问的那样:Selenium switch to the wrong iframe when closing another one并回答了这个问题,我可以强制切换到父框架,并使用相同的想法切换到有或没有任何脚本的框架。

问题在于,强制开关不是实现此目的的好方法。这类似于使用Thread.sleep(500),因为我知道执行脚本大约需要500毫秒。

所以我正在尝试等待jQuery和JavaScript通过使用完成:

// Wait for JS 
public static ExpectedCondition<Boolean> waitForJSToLoad() {
    return new ExpectedCondition<Boolean>() {

        @Override
        public Boolean apply(final WebDriver driver) {
            return ((JavascriptExecutor) driver).executeScript("return document.readyState").toString().equals("complete");
        }
    };
}

// Wait for jQuery
public static ExpectedCondition<Boolean> waitForAjaxResponse() {
    return new ExpectedCondition<Boolean>() {

        @Override
        public Boolean apply(final WebDriver driver) {
            try {
                final JavascriptExecutor js = (JavascriptExecutor) driver;
                return js.executeScript(
                    "return((window.jQuery == null )||(window.jQuery != null && jQuery.active === 0))").equals(true);
            } catch (final WebDriverException e) {
                LOG.info("Error while waiting for jQuery");
                return false;
            }
        }
    };
}

但是所有return语句都是正确的,所以我得到一个TimeOutException,因为当我切换到框架时JS和jQuery已经完成,但这是错误的。

脚本如下所示:

function _optimizeSize() {
    var $popin = $('#iframePopin'),
    // Some var init
    $dialog.transition({top: optimizeTop});
    $popin.transition({height: contentHeight + actionBarHeight + popinPaddingHeight});
    $iFrame.transition({height: contentHeight});
}

我看过类似的案例,但是找不到解决我问题的答案。

0 个答案:

没有答案