在浏览器实例之间切换

时间:2016-01-07 08:32:13

标签: c# selenium

我有多个并行运行的Selenium测试。我如何激活"不同的浏览器窗口(即模拟用户点击任务栏,使窗口激活)?

默认情况下,Selenium的第一个浏览器实例处于活动状态,并且涵盖了我的其他浏览器窗口。

我已经查看了其他SO线程(java),如果我理解正确,我应该跟踪所有webdriver实例"当前窗口句柄",然后执行切换通过以下方式:

activeWebDriver.SwitchTo().Window(someInactiveWindowHandle);

这是对的吗?如果是这样,我怎么知道哪些webdriver实例当前位于顶部,所以我知道从切换的内容?

1 个答案:

答案 0 :(得分:2)

您可以使用driver.CurrentWindowHandle跟踪窗口。这是一个看起来像

的字符串
  

" CDwindow-3E960650-3D6F-4083-939A-5887B46A5E23"

用于识别当前的驱动程序活动窗口。

string currentHandler = driver.CurrentWindowHandle;

// switch to new window
foreach (string handle in driver.WindowHandles)
{
    if (!handle.Equals(currentHandler))
    {
        driver.SwitchTo().Window(handle);
    }
}

//do something on new window

// switch back to old window
driver.Close();
driver.SwitchTo().Window(currentHandler);
  

用法示例

Dictionary<string, IWebDriver> driversByHandles;

IWebDriver driver1;
IWebDriver driver2;
IWebDriver driver3; 

[SetUp]
public void SetUp()
{
    driversByHandles = new Dictionary<string, IWebDriver>();

    driver1.Navigate().GoToUrl(Url);
    driversByHandles.Add(driver1.CurrentWindowHandle, driver1);

    driver2.Navigate().GoToUrl(Url);
    driversByHandles.Add(driver2.CurrentWindowHandle, driver2);

    ...
}

[Test]
public void Test()
{
    foreach(KeyValuePair<string, IWebDriver> entry in driversByHandles)
    {
        if (entry.Key.equals(targetHandle))
        {
            entry.Value.SwitchTo().Window(entry.Key);
        }
    }
}