【发布时间】: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}"
}
我注意到的事情:
- okHandler 方法似乎正在运行
- “okayResult”的值为空
- 我可以手动验证没有按下实际按钮
所以,要么我的 ConfirmHandler 不正确,要么我调用不正确,要么我对 javascript 警报窗口的理解不正确。我的问题是:
- ConfirmHander 有什么问题?
- 是否有更好的方法来处理 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