我正在使用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
正确的方法吗?
任何帮助都会受到赞赏。
答案 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);
}
您可以等待文档准备好并执行硒点击...