如何在 java 中使用 HtmlUnitDriver 处理警报?
How to handle alert with HtmlUnitDriver in java?
我正在尝试使用 HtmlUnitDriver 处理警报事件,但我遇到了一些问题,我想了解原因。
这是 java 代码:
HtmlUnitDriver browser = new HtmlUnitDriver(true);
browser.get("http://localhost:8001/index.html");
browser.findElementById("myButton").click();
try {
WebDriverWait wait = new WebDriverWait(browser, 2);
wait.until(ExpectedConditions.alertIsPresent());
Alert alert = browser.switchTo().alert();
alert.accept();
System.out.println("ALERT");
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println("NO ALERT");
}
String htmlContent = browser.getPageSource();
System.out.println(htmlContent);
browser.close();
这是 html 代码:
index.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<meta charset="utf-8" />
</head>
<body>
<form id="form1">
<input id="username" name="username" />
<button id="myButton" type="button" value="Page2">Go to Page2</button>
</form>
</body>
</html>
<script>
document.getElementById("myButton").onclick = function () {
location.href = "page2.html";
};
</script>
page2.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Page2</title>
<meta charset="utf-8" />
</head>
<body onload="myfunction('hello2')">
<p id="result"></p>
</body>
</html>
<script>
function myfunction(data) {
document.getElementById('result').innerHTML = data
}
</script>
控制台的输出是:
NO ALERT
<?xml version="1.0" encoding="UTF-8"?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>
Page2
</title>
<meta charset="utf-8"/>
</head>
<body onload="myfunction('hello2')">
?
<p id="result">
hello2
</p>
<script>
//<![CDATA[
function myfunction(data) {
document.getElementById('result').innerHTML = data
}
//]]>
</script>
</body>
</html>
看输出,它似乎与源代码有点不同,对此我有几个问题。
为什么未检测到 page2.html 上的警报?
为什么会有一些多余的字符,比如“?”和“// <![CDATA[”?我怎样才能避免它们?
我正在尝试处理警报,而且我才刚刚开始,所以任何建议都将不胜感激。
您预计警报来自哪里?处理警报的代码看起来不错,但 HTML 中没有任何内容表明警报将在任何阶段触发。在第 2 页上运行的唯一脚本是将 p#result
的内部 HTML 设置为 'hello2'.
至于多余的字符,我不太确定。 This answer 可能会阐明正在生成的 CDATA 内容。
我正在尝试使用 HtmlUnitDriver 处理警报事件,但我遇到了一些问题,我想了解原因。 这是 java 代码:
HtmlUnitDriver browser = new HtmlUnitDriver(true);
browser.get("http://localhost:8001/index.html");
browser.findElementById("myButton").click();
try {
WebDriverWait wait = new WebDriverWait(browser, 2);
wait.until(ExpectedConditions.alertIsPresent());
Alert alert = browser.switchTo().alert();
alert.accept();
System.out.println("ALERT");
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println("NO ALERT");
}
String htmlContent = browser.getPageSource();
System.out.println(htmlContent);
browser.close();
这是 html 代码: index.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<meta charset="utf-8" />
</head>
<body>
<form id="form1">
<input id="username" name="username" />
<button id="myButton" type="button" value="Page2">Go to Page2</button>
</form>
</body>
</html>
<script>
document.getElementById("myButton").onclick = function () {
location.href = "page2.html";
};
</script>
page2.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Page2</title>
<meta charset="utf-8" />
</head>
<body onload="myfunction('hello2')">
<p id="result"></p>
</body>
</html>
<script>
function myfunction(data) {
document.getElementById('result').innerHTML = data
}
</script>
控制台的输出是:
NO ALERT
<?xml version="1.0" encoding="UTF-8"?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>
Page2
</title>
<meta charset="utf-8"/>
</head>
<body onload="myfunction('hello2')">
?
<p id="result">
hello2
</p>
<script>
//<![CDATA[
function myfunction(data) {
document.getElementById('result').innerHTML = data
}
//]]>
</script>
</body>
</html>
看输出,它似乎与源代码有点不同,对此我有几个问题。 为什么未检测到 page2.html 上的警报? 为什么会有一些多余的字符,比如“?”和“// <![CDATA[”?我怎样才能避免它们?
我正在尝试处理警报,而且我才刚刚开始,所以任何建议都将不胜感激。
您预计警报来自哪里?处理警报的代码看起来不错,但 HTML 中没有任何内容表明警报将在任何阶段触发。在第 2 页上运行的唯一脚本是将 p#result
的内部 HTML 设置为 'hello2'.
至于多余的字符,我不太确定。 This answer 可能会阐明正在生成的 CDATA 内容。