2016-05-18 131 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

相关问题