我有多个并行运行的Selenium测试。我如何激活"不同的浏览器窗口(即模拟用户点击任务栏,使窗口激活)?
默认情况下,Selenium的第一个浏览器实例处于活动状态,并且涵盖了我的其他浏览器窗口。
我已经查看了其他SO线程(java),如果我理解正确,我应该跟踪所有webdriver实例"当前窗口句柄",然后执行切换通过以下方式:
activeWebDriver.SwitchTo().Window(someInactiveWindowHandle);
这是对的吗?如果是这样,我怎么知道哪些webdriver实例当前位于顶部,所以我知道从切换的内容?
答案 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);
}
}
}