【问题标题】:Groovy, HTMLUNIT and Javascript popup windowGroovy、HTMLUNIT 和 Javascript 弹出窗口
【发布时间】:2018-02-24 00:43:09
【问题描述】:

我正在使用 htmlunit 和 groovy 来执行大量的网络自动化。尝试在 javascript 弹出警报窗口(不是普通的浏览器窗口)上按下“确定”按钮时,我被卡住了。我已经设置了 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. okHandler 方法似乎正在运行
  2. “okayResult”的值为空
  3. 我可以手动验证没有按下实际按钮

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

  1. ConfirmHander 有什么问题?
  2. 是否有更好的方法来处理 javascript 警报窗口?我需要做的就是通过按“确定”来确认它。

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

这是我的浏览器设置

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') ,passedErrorMessageHere]

【问题讨论】:

    标签: javascript groovy htmlunit


    【解决方案1】:

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

    【讨论】:

    • 感谢 RBRi。你给了我更多的思考,特别是该窗口是一个 alert() 窗口,而不是确认。这指示我改用 AlertHandler,但我仍然没有得到它。我正在尝试我所知道的一切。
    • 这是我的浏览器设置 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,错误消息))
    • 呸,我会把这些 cmets 放在主要问题中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    相关资源
    最近更新 更多