在浏览器实例之间切换

本文关键字:之间 实例 浏览器 | 更新日期: 2023-09-27 18:29:23

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

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

我已经查看了其他SO线程(java),如果我正确理解它们,我应该跟踪所有的网络驱动程序实例"当前窗口句柄",并以以下方式执行切换:

activeWebDriver.SwitchTo().Window(someInactiveWindowHandle);

这是正确的吗?如果是这样的话,我如何知道我的哪些网络驱动程序实例当前处于顶部,以便我知道从切换

在浏览器实例之间切换

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

"CD窗口-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);
        }
    }
}