硒“等待.直到”不等到提供的路径在 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 更新时,我认为旧的被删除并替换了它,它遇到了微笑问题。由于它已被移除,因此没有对象可以等待,因此它会触发。
一个丑陋的黑客是只包含一个 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);
}
您可以等待文档准备就绪并执行您的硒点击...