如何在java中使用HtmlUnitDriver处理警报?

时间:2016-10-01 17:01:06

标签: java html selenium alert htmlunit-driver

我正在尝试使用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上的警报? 为什么会有一些额外的字符,例如“?”和“//&lt;![CDATA [”?我该如何避免它们?

我正在尝试处理警报,而我刚开始,所以任何建议都会受到欢迎。

1 个答案:

答案 0 :(得分:0)

您希望警报来自哪里?处理警报的代码看起来没问题,但HTML中没有任何内容表明在任何阶段都会触发警报。第2页上运行的唯一脚本是将p#result的innerHTML设置为&#39; hello2&#39;。

就额外角色而言,我不太确定。 This answer可能会对正在生成的CDATA内容有所了解。