1

我正在使用 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 窗口,那将非常有帮助。建议将不胜感激。提前致谢 !

4

1 回答 1

0
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
于 2012-08-09T20:48:56.040 回答