selenium`wait.until`没有等到提供的路径在DOM上呈现

时间:2016-02-24 07:46:03

标签: c# angularjs selenium selenium-webdriver nunit

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

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

wait.Until代码在DOM渲染之前被激活,因此我的测试用例失败了。任何洞察力。

在DOM获得渲染之前,不是一个等待wait.Until正确的方法吗?

任何帮助都会受到赞赏。

3 个答案:

答案 0 :(得分:0)

当DOM得到更新时,它有一个微笑的问题,我认为它被删除了,而新的一个取代了它。由于它被删除,因此没有任何物品可以等待,因为它会被触发。

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

有时候它可以帮助在第一个之后放置另一个,以便在加载时捕获新对象。或者尝试将另一个对象作为目标,然后获取您需要使用的正确对象。

但是,这是一个令人恼火的错误,答案取决于网站的行为和负载。

答案 1 :(得分:0)

wait.Until不会等到DOM完全加载,直到满足条件为止,在这种情况下元素是可点击的。

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

wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("stepsGrid"))).Click();

答案 2 :(得分:0)

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

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