Selenium-如何使驱动程序等到DOM元素完成刷新

时间:2018-08-14 02:39:23

标签: java selenium automation wait

我要自动执行的页面的DOM中有一个元素。该表具有项目列表(购物车,1 <li>-1行)。我要通过单击按钮来删除项目,我想等到表刷新完成。

我不想使用wait.until(ExpectedConditions.stanelessOf(),因为我希望此脚本是可调整的,而不是关注列表中特定数量的元素。我也不想使用Thread.sleep,因为它看起来并不优雅。 我是在研究目的时这样做的,否则我可能会找到一种更简单的方法来做到这一点,但并不是那样的“优雅”,我也不会学到任何新东西。

3 个答案:

答案 0 :(得分:1)

您可以尝试以下代码:

driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);

答案 1 :(得分:0)

您可以尝试以下操作: 此代码使用“ ExpectedConditions”等待元素的可见性

switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean selected) {

            //If switch has a tag, ignore below
            if(compoundButton.getTag() != null)
                return; 

            if (selected) {
                // do something
            } else {
                // do something else
            }

        }
    });

也可以将String xPathSplit = <xpath> try { WebDriverWait wait = new WebDriverWait(driver, 90); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xPathSplit))); } catch (Throwable e) { e.printStackTrace(); } 替换为visibilityOfElementLocated

答案 2 :(得分:0)

以下代码使用Javascript Executor本身检查文档状态:

public void waitForPageToLoad() {

    WebDriverWait wait = new WebDriverWait(driver, 10);
    wait.until(new ExpectedCondition<Boolean>() {

        public Boolean apply(WebDriver wdriver) {
            return ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete");
        }
    });
}