【问题标题】:Selenium - how to make driver wait till DOM element is finished refreshingSelenium - 如何让驱动程序等到 DOM 元素完成刷新
【发布时间】:2018-08-14 02:39:23
【问题描述】:

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

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

【问题讨论】:

  • 等待 元素刷新。对不起。我不知道如何编辑我的帖子。
  • 点击下面的edit链接javaselenium...标签
  • @VladKorol,刷新时是否显示任何加载程序?

标签: java selenium automation wait


【解决方案1】:

你可以试试这个代码:

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

【讨论】:

  • 只有 元素的子元素发生变化,网页不刷新。
  • 例如 - 我有 3 行有一些记录。我从购物车中取出一件物品,只留下 2 件物品。网页不刷新,但表格正在刷新
  • 因为你有一个不需要刷新页面的动态表,所以即使你不刷新页面,当 DOM 发生变化时,selenium 元素也会立即发生变化
【解决方案2】:

你可以试试这个: 此代码使用“ExpectedConditions”等待元素的可见性

String xPathSplit = <xpath>
    try {
        WebDriverWait wait = new WebDriverWait(driver, 90);
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xPathSplit)));
    } catch (Throwable e) {
        e.printStackTrace();
    }

还可以将visibilityOfElementLocated 替换为elementToBeClickable

【讨论】:

    【解决方案3】:

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

    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");
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2015-10-19
      • 2019-11-13
      • 2012-08-03
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 2019-10-09
      相关资源
      最近更新 更多