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}"
}
我注意到的事情:
- okayHandler方法好像是运行
- "okayResult" 的值为 null
- 我可以手动验证实际的按钮没有被按下
所以,要么我的 ConfirmHandler 不正确,我调用它不正确,要么我对 javascript 警报 window 的理解不正确。我的问题是:
- 我在使用 ConfirmHander 时做错了什么?
- 是否有更好的方法来处理 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(....)).
我正在使用 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}"
}
我注意到的事情:
- okayHandler方法好像是运行
- "okayResult" 的值为 null
- 我可以手动验证实际的按钮没有被按下
所以,要么我的 ConfirmHandler 不正确,我调用它不正确,要么我对 javascript 警报 window 的理解不正确。我的问题是:
- 我在使用 ConfirmHander 时做错了什么?
- 是否有更好的方法来处理 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(....)).