2016-02-29 116 views
1

我一直在使用C#selenium来自动化应用程序。我正面临执行测试时出现间歇性故障的问题。C#硒:测试间歇失败

有时测试通过&有时会失败。

失败说明该元素/框架/窗口不可用。

我一直在使用下面的代码等待

WebDriverWait wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(100)); 
      IWebElement elementToWait = wait.Until<IWebElement>((d) => 
      { 
       return Driver.Instance.FindElement(By.Id("Element ID")); ; 
      }); 

是这种不一致是由于等待的webdriver使用?为避免这种情况,最佳做法是什么?

+1

当调用FindElement()时,使用WebDriverWait将解决不在DOM中的元素的时序问题。但是,听起来您的情况中还有其他细节(您迄今为止拒绝提供)。来自例外的确切消息将是一个好的开始。据我所知,.NET绑定中没有代码,也没有任何浏览器特定的驱动程序实现会导致发生异常,并显示消息“元素/框架/窗口不可用”。 – JimEvans

回答

0

这是一个非常宽泛的问题,但是这在硒中发生的最常见的原因是因为调用FindElement时元素不在DOM中。

有许多东西你可以试试... 有一件事你应该在你的驱动程序实例如下设置一个隐含的等待超时:

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(50)); 

这应该做你的初始化后的webdriver权实例。

你可以尝试的第二件事是用预期时调用FindBy:

IWebElement element = wait.Until(ExpectedConditions.ElementExists(By.Id("Element ID"))); 

,有几种不同的ExpectedConditions,你可以测试出来,看看有什么最适合你。

0

我想看看上面的代码。你正在浏览页面吗?

如果是的话,尝试在此之前加入短睡眠:

Thread.Sleep(500); 

隐等待是伟大的,但他们往往有高失败率没有短硬编码的睡眠。通常它只需要100毫秒。

0

您提到的问题是因为在100秒后,您的元素仍然没有出现在DOM上,请将您的日志发送给我们,但我确信这是因为这一点。

隐式/显式等待工作的方式是在设置完成之后,如果元素不存在,则会引发一个异常,并带有超时消息(在您遇到100秒后)。

但是,请再次提供更多信息。