2016-05-18 101 views
0

enter image description here我想切換到單擊圖像時生成的jQuery模態窗口。然而Selenium(IE Webdriver)無法識別生成的模式窗口並且無法切換。沒有異常/錯誤顯示!Selenium IE Webdriver:無法切換到jQuery模態窗口

IE版本 - 11 硒版本 - 2.53 IE版本的webdriver - 2.53.1

我曾嘗試切換代碼:

objMovePage.clickFromAccountPicker(); //Image clicked 

Thread.sleep(2000); //Wait for new window to show up 
Set<String> windows = driver.getWindowHandles(); 

System.out.println(windows.size()); // This returns 1 always. 


for(String handle: windows) 
{ 
    driver.switchTo().window(handle); 
} 
System.out.println(driver.getTitle()); //Prints current window title 

我也曾嘗試driver.switchTo().window("<window name>"); // This also doesn't work.

HTML代碼被點擊圖片

<td style="height: 20px"> 
<input id="imgPickAcct" align="top" type="image" style="border-width:0px;" onclick="PickAcctClick(711269, 450, 300);" src="images/magnifyglass.gif" tabindex="-1" name="imgPickAcct"> 
</td> 

JS功能

function PickAcctClick(intTransmissionID, intwidth, intheight) 
     { 
       var lstrPath = 'wfrmGetTransmittedAccounts.aspx?TransmissionID=' + intTransmissionID; 
       var returnValues = openModal(lstrPath, intwidth, intheight); 
       if (returnValues != undefined) 
       { 
       document.forms[0].txtFromAccountingID.value = returnValues[0].toString(); 
       document.forms[0].txtFromDept.value = returnValues[1].toString(); 
       document.forms[0].txtFromAcct.value = returnValues[2].toString(); 
       document.forms[0].txtFromCur.value = returnValues[3].toString(); 
       document.forms[0].txtFromProduct.value = returnValues[4].toString(); 
       if (isAnObject("txtFromChart1")) 
        {document.forms[0].txtFromChart1.value = returnValues[5].toString();} 
       if (isAnObject("txtFromChart2")) 
        {document.forms[0].txtFromChart2.value = returnValues[6].toString();} 
       if (isAnObject("txtFromChart3")) 
        {document.forms[0].txtFromChart3.value = returnValues[7].toString();} 
       } 
       return false; 
     } 

注:這不是從在showModalDialog警告或對話窗口。 編輯:沒有iFrame。

回答

0

driver.switchTo()用於在幀,窗口和標籤之間切換。一個模式窗口就像任何div一樣是「常規」的HTML標記。 你不需要切換到它,你可以使用xpath(或css選擇器等)來選擇你想要的任何元素。

編輯:

如果彈出沒有找到很可能你有一個計時問題(例如,2秒時間不夠)。 我建議使用明確的等待(請參閱WebDriverWait,如this answer中使用的那樣)。顯式等待總是比干脆將線程置於睡眠狀態更清潔。

+0

它在一個帶有自己HTML代碼的新窗口中打開。沒有切換,我試圖執行元素操作,得到NoSuchElementException – Haxor

+0

這是一個真正的彈出?我懷疑你寫了'System.out.println(windows.size()); //總是返回1。這強烈地表明沒有創建新窗口。另外一個模式窗口不應該在新窗口中打開。如果您確定模式窗口是彈出窗口並且未被硒找到,請發佈截圖和/或html – samjaf

+0

添加屏幕截圖。 – Haxor

0

我也面臨同樣的窗口,請參閱該鏈接並在REGEDIT.EXE

首先是啓動InternetExplorer的私人模式下配置。在 之後,InternetExplorer將以乾淨的會話數據啓動,並且 不會在退出時保存更改的會話數據。爲此,您需要將特定功能通過2 傳遞給驅動程序:ie.forceCreateProcessApi,其值爲true,值爲 ,ie.browserCommandLineSwitches帶有-private值。請注意0​​它只能用於InternetExplorer 8和更新版本,以及Windows 註冊表HKLM_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Main路徑應該包含帶有0值的鍵TabProcGrowth。

第二個是在InternetExplorer啓動期間清理會話。對於 ,您需要將具有 真實值的特定ie.ensureCleanSession功能傳遞給驅動程序。這會清除InternetExplorer的所有正在運行的實例 的緩存,包括手動啓動的那些緩存。

僅適用於IE 11,您需要在目標計算機上設置一個註冊表項,以便驅動程序可以維護與其創建的Internet Explorer的實例 的連接。對於32位Windows安裝,您必須在註冊表編輯器中檢查的 密鑰是 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BFCACHE。對於64位Windows 安裝,密鑰爲 HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BFCACHE。請注意, FEATURE_BFCACHE子項可能存在,也可能不存在,如果不存在,應該創建 。重要提示:這裏面的關鍵,創建0

https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver

添加TabProcGrowth進入解決我的問題的值名爲iexplore.exe一個 DWORD值。

我認爲打開私有會話可以忽略。

+0

目標計算機是網絡服務器嗎?或者我正在運行Selenium的系統? – Haxor

+0

我上面試過,webdriver根本無法啓動。 – Haxor

相關問題