我正在使用HTMLunit(同时尝试了2.43.1和2.46.0)。我遇到一个问题,看起来HTMLunit实际上是在加载过程中呈现/更改HTML。
如果我在Chrome中检查HTML,则该字段如下所示:
<div class="field">
<input id="password" name="password" placeholder="Password" type="password">
</div>
非常简单,因为我应该能够通过id =“password”选择字段,对吧?好吧,当我通过HTMLunit加载页面时:
driver.setJavascriptEnabled(true);
driver.get(baseUrl + "/");
String foo = driver.getPageSource();
System.out.println("======\n" + foo + "\n==========\n");
查看输出,该字段如下所示:
<div class="field">
<input id="password" type="text" placeholder="Password" class="placeholder" value="Password"/>
<input name="password" placeholder="Password" type="password" style="display: none;"/>
</div>
现在,还有一件事,这个div只有通过点击JavaScript按钮才能看到。所以,为此,我执行:
driver.findElement(By.cssSelector("button.js-login-widget-button")).click();
foo = driver.getPageSource();
System.out.println("======\n" + foo + "\n==========\n");
现在该字段看起来像这样:
<div class="field">
<input id="" type="text" placeholder="Password" class="placeholder" value="Password"/>
<input name="password" placeholder="Password" type="password" style="display: none;"/>
</div>
所以,现在,我没有id来选择字段。我可以按名称选择,但输入是不可见的,所以我得到一个ElementNotVisibleException。
但我的重要问题是为什么HTMLunit会改变HTML而打破我?
请帮助!
谢谢, 大卫