简体   繁体   English

在浏览器实例之间切换

[英]Switching between browser instances

I have multiple Selenium tests that I run in parallel. 我有多个并行运行的Selenium测试。 How do I "activate" the different browser windows (ie simulating a user click in the taskbar, making the window active)? 如何“激活”不同的浏览器窗口(即模拟用户在任务栏中的单击,使窗口处于活动状态)?

By default, Selenium's first browser instance is active and covers my other browser windows. 默认情况下,Selenium的第一个浏览器实例处于活动状态,并且覆盖了我的其他浏览器窗口。

I've looked in to the other SO threads (java), and if I understand them correctly, I should keep track of all the webdriver instances "current window handles", and perform a switch in the following way: 我查看了其他SO线程(java),如果我对它们的理解正确,则应该跟踪所有webdriver实例的“当前窗口句柄”,并按以下方式执行切换:

activeWebDriver.SwitchTo().Window(someInactiveWindowHandle);

Is this correct? 这个对吗? If so, how would I know which of my webdriver instances that are currently on top, so I know what to switch from ? 如果是这样,我将如何知道当前位于哪个Webdriver实例的顶部,因此我知道该哪个切换?

You can keep track on the windows using driver.CurrentWindowHandle . 您可以使用driver.CurrentWindowHandle在窗口上driver.CurrentWindowHandle This is a string that looks like 这是一个看起来像的字符串

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

And used to identify the current driver active window. 并用于标识当前驱动程序的活动窗口。

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);

Usage example 使用范例

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);
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM