我在#IE9 中使用 webDriver,我发现了一个问题。如果我在运行模式下开始测试,那么所有测试都会失败,因为 webDriver 不存在(即两个窗口),但是如果我在测试中放置断点并开始测试 Debug模式,我已经通过了所有测试。请告诉我,做什么,因为我不知道。 这是我的代码:
private void MyMethods(IWebdriver driver)
{
foreach (var item in driver.WindowHandles) // if I put breakpoint, I see 2 count Window Handles else this methods don't work.
{
if (driver.SwitchTo().Window(item).Title == "PortalSubMenuPopupForm")
{
driver.SwitchTo().Window(item);
break;
}
}
}
请您参考如下方法:
Selenium 与 IE 有一个“问题”,即新窗口可能不会立即出现在 WindowHandles 列表中。
解决方案是
- 在调用 d
river.WindowHandles之前等待一段固定时间
或
- 使用
WebDriverWait类等待WindowHandles下的元素个数改变
我认为第二个更强大。这是一个快速实现:
public void LaunchNewWindow(IWebElement element)
{
int windowsBefore = driver.WindowHandles.Count;
element.Click();
TimeSpan timeout = new TimeSpan(0, 0, 10);
WebDriverWait wait = new WebDriverWait(driver, timeout);
wait.Until((_driver) =>
{
return _driver.WindowHandles.Count != windowsBefore;
//optionally use _driver.WindowHandles.Count > windowsBefore
});
}
现在你可以像这样使用函数了:
IWebElement clickMe = //some element that launches a new window
LaunchNewWindow(clickMe);
foreach (var item in driver.WindowHandles)
{
//etc.
}
