2016-01-07 102 views
0

我有多個並行運行的Selenium測試。如何「激活」不同的瀏覽器窗口(即模擬用戶在任務欄中單擊,使窗口處於活動狀態)?在瀏覽器實例之間切換

默認情況下,Selenium的第一個瀏覽器實例處於活動狀態,並覆蓋我的其他瀏覽器窗口。

我查看了其他SO線程(java),如果我正確理解它們,我應該跟蹤所有webdriver實例「當前窗口句柄」,並按以下方式執行切換:

activeWebDriver.SwitchTo().Window(someInactiveWindowHandle); 

這是正確的嗎?如果是這樣,我怎麼會知道我的哪些webdriver實例目前處於頂端,所以我知道要從切換

回答

1

您可以使用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); 
     } 
    } 
} 
+0

所以'CurrentWindowHandle'可以指向到其他瀏覽器手柄,只是沒有當前webdrivers?據我所知,這隻能在同一瀏覽器實例中的窗口之間切換。 – filur

+0

當您打開新窗口時,您不會創建新的WebDriver實例,您只需在驅動程序的Windows列表中添加另一個瀏覽器窗口(「ReadOnlyCollection ')。 – Guy

+0

我的每個測試都有一個單獨的webdriver連接到它。 – filur

相關問題