如何处理从另一个弹出窗口触发的一个弹出窗口?

时间:2013-01-25 17:23:11

标签: selenium webdriver selenium-webdriver

我正在使用Firefox 8.0.1测试Selenium 2.29(由于模态对话框问题,之前在2.17上测试了我在FF 11中作为最大版本)。我有一个图标,点击时触发一些JavaScript代码。这个JS代码触发了一个我能够使用它来处理的弹出窗口:

driver.findElement(By.xpath(""xpath_to_icon")).click;

log("Alert text = " + getAlertText()); //log just outputs to the console

acceptAlert;

上面的代码处理第一个弹出窗口的触发和接受没有问题。我遇到的问题是在第一个弹出窗口(我必须为我的测试做)上单击“确定”会触发第二个弹出窗口。到目前为止,我还没有成功处理第二个弹出窗口。我尝试过以下代码的变体而没有运气:

acceptAlert;

driver.switchTo().alert().accept();

selenium.keyDownNative("32");
selenium.keyUpNative("32");

 Thread t = new Thread(new Runnable() {
     public void run() {
     // driver.findElement("").click();
     log("Alert2 text = " + getAlertText());
     acceptAlert();
     }
     });
     t.start();

每次抛出此错误:org.openqa.selenium.UnhandledAlertException:存在模态对话框。以前我会手动点击第二个弹出窗口中的“确定”按钮,但这不再是2.29。

目前我只有一个具有此特定问题的测试用例,但我想看看是否还有其他人遇到此问题。找到了处理它的好方法。谢谢。

1 个答案:

答案 0 :(得分:0)

Qrazi是对的,如果有框架,你必须改变目标框架,新的弹出窗口需要将焦点切换到它们。 selectFrameselectPopupselectWindow是一个很好的起点。

切换焦点后,您可以自动点击“确定”按钮。不要忘记最后将焦点切换回来!

对于帧,以下代码将帧焦点放在页面顶部。一旦进入框架内,就无法再看到父框架了。

Driver.getDriver().switchTo().defaultContent();