【问题标题】:Unable to handle showModalDialog window in Selenium Webdriver(Java)无法在 Selenium Webdriver(Java)中处理 showModalDialog 窗口
【发布时间】:2012-08-09 17:52:47
【问题描述】:

我正在使用 Selenium webdriver(java) 自动化 Web 应用程序。我已经在应用程序的其他部分处理了弹出窗口,但我无法处理 showModalDialog 窗口。应用程序具有只读文本框,我必须通过单击“搜索”按钮来填写它,这将打开新的弹出窗口。

此文本框和 Serach 按钮的 HTML 代码如下。

 <tr>
 <td><label class="classLabel">Textbox<sup class="mandatory">*</sup></label></td>
 <td><input type="text" name="textbox" value="" readonly="readonly" class="someTextbox">
 <img src="/Some/url/search.gif" alt="Select Help" onclick="launch2()" />
 </td>
  </tr>

点击搜索按钮后,会打开一个 showModalDialog 窗口,我必须点击一个单选按钮来填充文本框。

这个 showModalDialog 窗口有 iframe 元素,下面是它的 html 代码。

  <iframe src="/some/url.do?parameter=getData" width='100%' height='100%' border=0 >  
  </iframe> 

下面是我用来切换到弹出窗口并选择 iframe 的代码。在这里,测试用例只是在单击搜索按钮后停止,并且弹出窗口也出现了,但它没有处理弹出窗口。

     driver.findElement(By.cssSelector("img[alt=\"Select Help\"]")).click();
     String winHandleBefore = myD.getWindowHandle();        
       for(String winHandle : myD.getWindowHandles()){
       driver.switchTo().window(winHandle);
        }
       driver.switchTo().frame(0);
           driver.findElement(By.name("hier_data_id")).click();

如果有人知道如何处理 showModalDialog 窗口,那将非常有帮助。建议将不胜感激。 提前致谢!

【问题讨论】:

  • 我已经编辑了我的问题。之前我认为它是弹出窗口,但经过研究我才知道它是 showModalDialog 窗口。

标签: java iframe selenium webdriver showmodaldialog


【解决方案1】:
import java.util.Iterator;
import java.util.Set;

private static String popUp;

//弹出前获取窗口句柄

Set<String> beforePopUp = driver.getWindowHandles();
    //do the click
driver.findElement(By.cssSelector("img[alt=\"Select Help\"]")).click();


  //get window handles after the click
Set<String> afterPopup = driver.getWindowHandles();

    //remove all window handles before the popup
 afterPopUp.removeAll(beforePopUp);
if(afterPopUp.size() == 1) {
popUp = (String) afterPopUp.toArray()[0];
 } else {// there might be more than on popups that might have been triggered by the click...do some error handling here}


 //switch to popUp
driver.switchTo().window(popUp);

//do your stuff

【讨论】:

  • 非常感谢您的回复,我编辑了我的问题。我无法处理的窗口是 showModalDialog 窗口。如果您知道如何处理 showModalDialog 窗口,请分享。
  • 如果在您点击后窗口获得焦点..那么您应该能够直接与窗口上的元素进行交互...尝试在您找到 iframe 之前插入一些等待时间窗口...
  • 现在我只能在 IE 驱动程序上与 showModalDialog 窗口元素进行交互,我参考了 Selenium 讨论页面中提供的一些解决方法。 Firefox 驱动和 Chrome 驱动似乎不支持 showModalDialog 窗口。有一个问题仍然存在(问题 284)。
  • 对不正确的信息投反对票。打开的弹出窗口不保证是 getWindowHandles() 返回的列表中的第二个。返回的句柄没有顺序,尤其是对于 IE 驱动程序。更正您的答案,我将删除反对票。
  • @JimEvans ..遍历窗口并假设第二个弹出窗口是我与弹出窗口中的元素交互的快速而肮脏的技巧。我通常不在我的代码中使用它但并不真正了解订单问题。我很高兴你提出这个问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 2020-06-11
  • 1970-01-01
相关资源
最近更新 更多