Groovy、HTMLUNIT 和 Javascript 弹出窗口 window

Groovy, HTMLUNIT and Javascript popup window

我正在使用 htmlunit 和 groovy 来执行大量 Web 自动化。在 javascript 弹出警报 window(不是普通浏览器 window)上尝试按 "OK" 按钮时,我卡住了。我已经设置了 ConfirmHandler - 我认为是正确的 - 但按钮仍然没有被按下。

这是我目前拥有的:

conn = new WebClient(javaScriptTimeout:1000)
conn.waitForBackgroundJavaScript(1000)
conn.getOptions().setJavaScriptEnabled(true);
conn.getOptions().setCssEnabled(false);

ConfirmHandler okayHandler = new ConfirmHandler() {
    boolean handleConfirm(Page page,String message) {
        return true
    }   
}

def page = conn.getPage(url)
def form = page.getFormByName("loginForm");

// code to login here - won't bore you with it

if (login failed) { // <-- this isn't the actual if statement, but need to remove for security purposes
    println "\n\nNeed to hit the okayHandler here"
    okayResult = conn.setConfirmHandler(okayHandler)
    println "\n\nOkay Result: ${okayResult}"
}

我注意到的事情:

  1. okayHandler方法好像是运行
  2. "okayResult" 的值为 null
  3. 我可以手动验证实际的按钮没有被按下

所以,要么我的 ConfirmHandler 不正确,我调用它不正确,要么我对 javascript 警报 window 的理解不正确。我的问题是:

  1. 我在使用 ConfirmHander 时做错了什么?
  2. 是否有更好的方法来处理 javascript 警报 window?我需要做的就是按 "ok" 确认它。

==============

这是我的浏览器设置

public void setupBrowser() {

conn = new WebClient(javaScriptTimeout:1000)
conn.waitForBackgroundJavaScript(1000)
conn.getOptions().setJavaScriptEnabled(true);
conn.getOptions().setCssEnabled(false);

AlertHandler myAlertHandler = new AlertHandler() {

    void handleAlert(Page page,String message) {
        println "\n\nClosing login alert message"
    }

}

}

以下是我尝试处理警报的方式:

conn.myAlertHandler(handleAlert(resultPage,errorMessage))

这是错误消息:

FAIL - 意外异常:没有方法签名:Groovy_charterLogin_Test.handleAlert() 适用于参数类型:(com.gargoylesoftware.htmlunit.html.HtmlPage, java.lang.String) 值:[HtmlPage('pagestuffhere'), 在这里传递错误信息]

您必须在警报打开之前设置确认处理程序;在您的情况下,您可以在构造后直接执行此操作,并确保使用真实的浏览器面对确认对话框 (window.confirm(....)).