【问题标题】:How to click a checkbox in Java using PhantomJS and Selenium?如何使用 PhantomJS 和 Selenium 在 Java 中单击复选框?
【发布时间】:2014-07-11 11:41:44
【问题描述】:

我想使用 PhantomJS 和 Selenuim 在 Java 中选择一个简单的复选框。

我用 Firefox 用这段代码做到了

driver.findElement(By.xpath("//label[@for='terms-checkbox']")).click();

但是当我更改为 PhantomJS 驱动程序时出现错误:invisible element ...

【问题讨论】:

  • 如果它是一个密集的、JS 和 AJAX 重的页面,可悲的事实是 PhantomJS(和其他无头浏览器)不适合这项工作。
  • 那么,即使使用 PhantomJS 1.9.7 的最新版本,也没有办法做到这一点?原因,我必须使用无头浏览器进行所有测试,并且它将在 linux 服务器上运行。
  • FwIW,这可能只是 PhantomJS 无法像传统浏览器那样处理标签点击的问题。如果我使用 PhantomJS 测试 JavaScript,那么我必须手动创建和调度鼠标事件才能让点击工作。不幸的是,这对 Selenium 帮助不大,但无论如何它可能是有用的信息!

标签: java firefox selenium checkbox phantomjs


【解决方案1】:

在我的案例中,核心问题出在我使用的 xpath 定位器上,在 phantomjs 中,如果要单击具有子 div 的元素,则需要单击该元素的特定子 div

<div class="ui-helper-hidden-accessible">
  <input id="addressUpdate:firmflg_input" name="addressUpdate:firmflg_input" autocomplete="off" aria-labelledby="addressUpdate:j_idt159" aria-checked="false" type="checkbox">
</div>
<div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default"><span class="ui-chkbox-icon ui-icon ui-icon-blank ui-c"></span>
</div>

如果您将这个 xpath //div[@id='addressUpdate:firmflg'] 用于上述代码片段,如果您在 phantomjs 上运行,它将无法单击该复选框,但它可以在其他浏览器中使用。 相反,如果你选择//div[@id='addressUpdate:firmflg']/div[2],这将适用于所有浏览器,包括 phantomjs。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    相关资源
    最近更新 更多