2

我正在使用 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: Modal dialog present。以前我会手动单击第二个弹出窗口上的“确定”按钮,但在 2.29 中不再可能了。

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

4

1 回答 1

0

Qrazi 是对的,如果有框架,您必须对目标框架进行编码更改,并且新的弹出窗口需要将焦点切换到它们。selectFrameselectPopup并且selectWindow是一个很好的起点。

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

对于框架,以下代码将框架焦点放在页面顶部。一旦你在一个框架内,你就不能再看到父框架了。

Driver.getDriver().switchTo().defaultContent();
于 2013-02-06T14:20:58.477 回答