我一直在使用C#selenium来自动化应用程序。我正面临执行测试时间歇性故障的问题。
有时测试通过&有时会失败。
失败表明元素/框架/窗口不可用。
我一直在使用以下代码进行等待
WebDriverWait wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(100));
IWebElement elementToWait = wait.Until<IWebElement>((d) =>
{
return Driver.Instance.FindElement(By.Id("Element ID")); ;
});
由于webdriver等待使用会导致这种不一致吗?为避免这种情况,最佳做法是什么?
答案 0 :(得分:0)
这是一个非常广泛的问题,但是在selenium中发生这种情况的最常见原因是因为调用FindElement时元素不在DOM中。
你可以尝试多种方法...... 您应该做的一件事是在驱动程序实例上设置隐式等待超时,如下所示:
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(50));
这应该在您初始化WebDriver实例后立即完成。
您可以尝试的第二件事是使用预期条件调用FindBy:
IWebElement element = wait.Until(ExpectedConditions.ElementExists(By.Id("Element ID")));
有几种不同的预期条件,您可以测试它们,看看哪种方式最适合您。
答案 1 :(得分:0)
我想看看它上面的代码。你在页面之间导航吗?
如果是这样,请尝试在此之前添加一个短暂的睡眠:
Thread.Sleep(500);
隐式等待非常好,但是如果没有短暂的硬编码睡眠,他们往往会有很高的失败率。通常它只需要100毫秒。
答案 2 :(得分:0)
你提到的问题是因为在100秒之后,你的元素仍然没有出现在DOM上,请将你的日志发送给我们,但我确信这是因为。
隐式/显式等待的工作方式是在您设置之后,如果该元素不存在,则会引发一个异常消息的异常(在您的情况下为100秒之后)。
但请再次提供更多信息。