C#Selenium:测试间歇性失败

时间:2016-02-29 17:57:01

标签: c# selenium selenium-webdriver

我一直在使用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等待使用会导致这种不一致吗?为避免这种情况,最佳做法是什么?

3 个答案:

答案 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秒之后)。

但请再次提供更多信息。