Skip to main content
 首页 » 编程设计

c#之C# 中的 WebDriver(使用 Windows 和同步)

2024年01月11日37zhengyun_ustc

我在#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 列表中。

解决方案是

  • 在调用 driver.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. 
}