想寫使用硒的webdriver在C#中的一些測試用例,並有我不能確定的情況下如何解決硒的webdriver選擇新窗口C#
用戶場景表格檢索的患者,選擇患者然後一個新的窗口打開,然後斷言窗口上的各種項目
我的問題是我無法選擇新的窗口來聲明任何東西,它不是一個彈出窗口,它是一個全新的瀏覽器窗口,但它沒有窗口標題/名稱來標識它,我將如何能夠將驅動程序焦點切換到此窗口?
在此先感謝
想寫使用硒的webdriver在C#中的一些測試用例,並有我不能確定的情況下如何解決硒的webdriver選擇新窗口C#
用戶場景表格檢索的患者,選擇患者然後一個新的窗口打開,然後斷言窗口上的各種項目
我的問題是我無法選擇新的窗口來聲明任何東西,它不是一個彈出窗口,它是一個全新的瀏覽器窗口,但它沒有窗口標題/名稱來標識它,我將如何能夠將驅動程序焦點切換到此窗口?
在此先感謝
Selenium WebDriver的確很簡單。通過使用SWITCHTO方法
driver.SwitchTo().Window(driver.WindowHandles.Last());
看到這個博客帖子以及
http://binaryclips.com/2015/03/13/selenium-webdriver-in-c-switch-to-new-window/
我收到此錯誤消息:'System.Collections.ObjectModel.ReadOnlyCollection
請使用System.Linq將此使用指令添加到代碼頂部 ; 然後你就可以訪問所有的Linq.Enumerables方法,如先(),最後()等。 – joinsaad 2015-04-02 11:18:08
如果我正確地收集您的應用程序會產生它自己的窗口,不進一步userintervention。你應該能夠等待頁面加載,然後你可以像平常一樣調用你的斷言。
硒已經有你的瀏覽器會話,所以一個新窗口不是硒的問題,它只是新的內容。
foreach (string defwindow in driver.WindowHandles)
{
driver.SwitchTo().Window(defwindow);
if(driver.Title == "")
{
selenium.WindowFocus();
selenium.SelectWindow("");
}
}
「」 - 表示你的窗口標題
我有一些代碼,你可能會喜歡。最快的解決方案是使用Popup Finder,但我也製作了自己的方法。我絕不會依賴窗口句柄所在的順序來選擇適當的窗口。 彈出式窗口查找器:
PopupWindowFinder finder = new PopupWindowFinder(driver);
driver.SwitchTo().Window(newWin);
我的自定義方法。基本上你可以通過它點擊你想要點擊的元素,你的web驅動程序,以及可選的時間,然後再點擊元素進行搜索。
它把你所有的當前手柄和一個列表。它使用該列表來消除以前存在的意外切換到的窗口。然後它點擊啓動新窗口的元素。點擊之後總會有某種延遲,因爲沒有任何反應會立即發生。然後,它會創建一個新列表,並將其與舊的列表進行比較,直至找到新窗口或循環過期。如果它找不到新窗口,它將返回空值,所以如果你有一個並不總是工作的iffy webelement,你可以做一個空檢查來查看交換機是否工作。
public static string ClickAndSwitchWindow(IWebElement elementToBeClicked,
IWebDriver driver, int timer = 2000)
{
System.Collections.Generic.List<string> previousHandles = new
System.Collections.Generic.List<string>();
System.Collections.Generic.List<string> currentHandles = new
System.Collections.Generic.List<string>();
previousHandles.AddRange(driver.WindowHandles);
elementToBeClicked.Click();
Thread.Sleep(timer);
for (int i = 0; i < 20; i++)
{
currentHandles.Clear();
currentHandles.AddRange(driver.WindowHandles);
foreach (string s in previousHandles)
{
currentHandles.RemoveAll(p => p == s);
}
if (currentHandles.Count == 1)
{
driver.SwitchTo().Window(currentHandles[0]);
Thread.Sleep(100);
return currentHandles[0];
}
else
{
Thread.Sleep(500);
}
}
return null;
}
此代碼適用於我。在我的情況下,新窗口/選項卡是一個有一定權重的PDF,所以我在加載時做了一些自定義的等待。
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
int previousWinCount = driver.WindowHandles.Count;
// Perform the action to open a new Window
wait.Until(driver => driver.WindowHandles.Count == (previousWinCount + 1));
driver.SwitchTo().Window(driver.WindowHandles.Last());
wait.Until(driver => driver.Url.Contains("desired_url_or_a_substring_of_it"));
注意,當PDF加載的driver.Url是「關於:空白」。
你可以嘗試通過窗口把手切換到它嗎? – 2015-03-13 10:01:42