Selenium IE Webdriver:无法切换到jQuery Modal窗口

时间:2016-05-18 05:49:32

标签: java selenium selenium-webdriver

enter image description here我想切换到单击图像时生成的jQuery Modal窗口。但是Selenium(IE Webdriver)无法识别生成的模式窗口并且无法切换。没有异常/错误显示!

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。

2 个答案:

答案 0 :(得分:0)

driver.switchTo()用于在框架,窗口和标签之间切换。模态窗口是&#34;常规&#34;像任何div一样的HTML标记。 你不需要切换到它,你可以使用xpath(或css选择器等)来选择你喜欢的任何元素。

编辑:

如果找不到弹出窗口,可能会出现计时问题(例如2秒时间不够)。 我建议使用明确的等待(请参阅this answer中使用的WebDriverWait)。显式等待总是比让线程进入休眠状态更清晰。

答案 1 :(得分:0)

我也面对同一个窗口,请参阅链接并在regedit.exe中配置

  

首先是以私人模式启动InternetExplorer。后   InternetExplorer将以干净的会话数据启动并将   在退出时不保存更改的会话数据。要做到这一点,你需要通过2   驱动程序的特定功能:ie.forceCreateProcessApi为true   value和ie.browserCommandLineSwitches具有-private值。请注意   它只适用于InternetExplorer 8及更新版本和Windows   注册表HKLM_CURRENT_USER \ Software \ Microsoft \ Internet   Explorer \ Main路径应包含键值TabProcGrowth,其值为0。

     

第二种是在InternetExplorer启动期间清理会话。对于   这需要传递特定的ie.ensureCleanSession功能   对驾驶员的真正价值。这将清除所有正在运行的实例的缓存   InternetExplorer,包括那些手动启动的。

     

仅对于IE 11,您需要在目标上设置注册表项   计算机使驱动程序可以保持与实例的连接   它创建的Internet Explorer。对于32位Windows安装,   您必须在注册表编辑器中检查密钥   HKEY_LOCAL_MACHINE \ SOFTWARE \微软\互联网   资源管理器\ MAIN \ FeatureControl \ FEATURE_BFCACHE。对于64位Windows   装置,关键是   HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \微软\互联网   资源管理器\ MAIN \ FeatureControl \ FEATURE_BFCACHE。请注意   FEATURE_BFCACHE子键可能存在也可能不存在,应该是   如果它不存在则创建。重要提示:在此密钥内,创建一个   DWORD值名为iexplore.exe,值为0.

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

添加 TabProcGrowth 条目解决了我的问题。

我认为打开私人会话可以被忽略。