硒“等待.直到”不等到提供的路径在 DOM 上呈现

本文关键字:路径 DOM 直到 等待 | 更新日期: 2023-09-27 18:36:01

我正在使用硒测试基于角度的应用程序,我想通过DOM处理一些测试用例。在通过 DOM 进行处理之前,我正在等待它通过提供XPATH/Selector使用wait.Until方法进行渲染。您可以在下面看到我在代码中使用的代码片段。

wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//[@id='stepsGrid'));
driver.FindElement(By.XPath("//[@id='stepsGrid']")).Click();

但是wait.Until代码在 DOM 渲染之前被触发,所以我的测试用例失败了。任何关于它的见解。

等到 DOM 渲染不是wait.Until正确的方法吗?

任何帮助将不胜感激。

硒“等待.直到”不等到提供的路径在 DOM 上呈现

当 DOM 更新时,我认为旧的被删除并替换了它,它遇到了微笑问题。由于它已被移除,因此没有对象可以等待,因此它会触发。

一个丑陋的黑客是只包含一个 Thread.Sleep(x),但我不建议在生产代码中使用它。

有时,它可以帮助在第一个对象之后放置另一个对象,以尝试在加载新对象时捕获新对象。或者,可以尝试定位另一个对象以等待,然后获取需要使用的正确对象。

但是,是的,这是一个令人讨厌的错误,答案取决于网站的行为和加载方式。

wait.Until不会

等到 DOM 完全加载,只会等到满足条件,在您的情况下,元素是可点击的。

wait.Until返回它正在等待的WebElement,请尝试单击该元素而不是重新定位它

wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("stepsGrid"))).Click();
    ExpectedCondition<Boolean> expectation = new ExpectedCondition<Boolean>() 
    {
        public Boolean apply(WebDriver driver)
        {
            return ((JavascriptExecutor)driver).executeScript("return document.readyState").equals("complete");
        }
    };
    try
    {
        wait.until(expectation);
        driver.FindElement(By.XPath("//[@id='stepsGrid']")).Click();
    }
    catch(Throwable error)
    {
        assertFalse("Timeout waiting for Page Load Request to complete.",true);
    }

您可以等待文档准备就绪并执行您的硒点击...