【发布时间】:2014-03-15 08:40:15
【问题描述】:
- 我正在使用 JSF 为 J2EE 应用程序编写 Selenium 2 + C# 和 Nunit。
- 可能因为它是基于 Ajax 或网络延迟的,所以 Selenium 会失败,除非我保留一些“等待”机制。我列出了我正在尝试的 4 种方法。但是,仍然有一些情况下测试挂起,或者说它无法获取元素,或者元素已过时。这些错误是随机的,并不一致。
- 所以我不断减少等待以减轻陈旧性,或增加等待以启用元素处理。当然,有时我会等待很长时间。
- 我一直在混淆各种方法,因为它们对我来说是一种魔法。下面列出的方法有什么问题吗?
谢谢。
A) 等待进度条
public void WaitForProgressBar(ref Screenshot ss, WebDriverWait wait, ref IWebElement progressBar, ref IWebDriver _driver)
{
try
{
progressBar = wait.Until<IWebElement>((d) =>
{
return d.FindElement(By.XPath("//span[@id='_viewRoot:status.start']/img[@src='images/pleasewait.gif']"));
});
}
catch
{
_logger.Debug("Could not locate progress bar");
}
progressBar = _driver.FindElement(By.XPath("//span[@id='_viewRoot:status.start']/img[@src='images/pleasewait.gif']"));
while (progressBar.Displayed)
System.Threading.Thread.Sleep(100);
_logger.Debug("Sleeping");
while (progressBar.Displayed)
System.Threading.Thread.Sleep(300);
ss = ((ITakesScreenshot)_driver).GetScreenshot();
ss.SaveAsFile("C:/WaitingForProgressBar.png", System.Drawing.Imaging.ImageFormat.Png);
}
B) 休眠,然后调用 WaitForProgressBar()
System.Threading.Thread.Sleep(2500);
logInAndConfigureHospital.WaitForProgressBar(ref ss, wait, ref progressBar, ref _driver);
C) 调用 WaitForProgressBar() 然后休眠
logInAndConfigureHospital.WaitForProgressBar(ref ss, wait, ref progressBar, ref _driver);
System.Threading.Thread.Sleep(250);
D) 使用等待直到
IWebElement checkBoxSelectAll = wait.Until<IWebElement>((d) =>
{
return d.FindElement(By.XPath("//div[@id='convertHandlerForm:ConvertHandlerLines_header']/table/tbody/tr/td/input"));
});
checkBoxSelectAll.Click();
【问题讨论】:
标签: selenium selenium-webdriver