簡體   English   中英

無法使用Selenium Webdriver通過switchTo()切換到新窗口

[英]Cannot switch to new window using Selenium Webdriver using switchTo()

我已經搜索了這個問題的答案。 我正在使用Selenium Webdriver和C#在IE8中進行測試。 在測試中的某個時刻,我需要單擊一個按鈕,然后將打開一個新的應用程序窗口,其中包含需要填寫的表格才能繼續測試。

我努力了:

driver.switchTo().Window(driver.WindowHandles[0]);
driver.switchTo().Window(driver.WindowHandles[1]); //this one usually returns and error
driver.switchTo().Window(driver.WindowHandles.Last());

我也嘗試過

foreach(String handle in driver.WindowHandles)
{
     driver.switchTo().Window(handle);
     //do things here
}

每個失敗,當我將句柄名稱寫入控制台時,無論我做什么,輸出都將是相同的窗口名稱。 有人對我如何獲得新窗口有想法嗎?

補充問題:

感謝@Saifur提供使用PopupWindowFinder的新方向。

到目前為止,這是我嘗試過的

string currentWindow = driver.CurrentWindowHandle;
PopupWindowFinder finder = new PopupWindowFinder(driver);
string popWindow = finder.Click(driver.FindElementById("Element"));
driver.SwitchTo().Window(popWindow);

因此,這應該單擊將開始彈出事件的元素,然后開關應將其放置在彈出窗口中,以便我可以繼續測試。 這是現在的問題。 當通過finder單擊Element時,正在測試的應用程序會創建一個彈出窗口,然后關閉該彈出窗口,然后出現另一個彈出窗口,然后將其關閉,最后出現需要測試的實際應用程序,並且該當前應用程序是監視器或啟動所有這些操作的初始頁面的后面。

那么,如何進入需要測試的應用程序窗口? 我試圖切換到顯示為嘗試將其跳至應用程序窗口的不同彈出窗口,但這沒有用。 提前致謝

這可能會有所幫助,它很有用:

IJavaScriptExecutor js = (IJavaScriptExecutor)driver;

//To open new tab
js.ExecuteScript("window.open()");
ArrayList tabs = new ArrayList(driver.WindowHandles);

//Switch driver to new tab
driver.SwitchTo().Window(driver.WindowHandles[1]);

//Close new tab
driver.Close();

//Switch driver to old tab
driver.SwitchTo().Window(driver.WindowHandles[0]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM