【问题标题】:unable to click on element with webdriverio无法使用 webdriverio 单击元素
【发布时间】:2017-09-11 02:58:32
【问题描述】:

我正在尝试使用 webdriverio/mocha 框架单击按钮 代码如下所示:

describe ('Mytest', function () {
beforeEach(function() {
    browser.url('/');
})
    it ('should click', function () {
        browser.click("[ng-click='startApplication()']");
    });
});

但我收到以下错误:

错误:使用给定的搜索参数无法在页面上找到元素。

我也试过 XPath:(//A[@ng-activate=''])[1]

得到同样的错误:

下面是这些按钮的 CSS

<div class="select-type__wrapper">
  <div class="row">
    <div class="col-sm-6">
      <!-- ngIf: device === 'phone' -->
      <!-- ngIf: device !== 'phone' -->
      <div ng-if="device !== 'phone'" class="block ng-scope">
        <a ng-activate="" ng-click="startApplication('?json=true')" class="btn btn-answer first ng-scope ng-click-active"></i>
        </a>
      </div>
      <!-- end ngIf: device !== 'phone' -->
    </div>
    <div class="col-sm-6">
      <!-- ngIf: device === 'phone' -->
      <!-- ngIf: device !== 'phone' -->
      <div ng-if="device !== 'phone'" class="block second ng-scope">
        <a ng-activate="" ng-click="startApplication('?parent-user=true&amp;json=true')" class="btn btn-answer ng-scope">
      </div>
      <!-- end ngIf: device !== 'phone' -->
    </div>
  </div>
</div>

【问题讨论】:

  • 只是为了确保及时加载 HTML 元素,browser.click("#myButton"); 是否适用于带有 ID 的 HTML 标记,例如 &lt;a id="myButton" ng-activate="" ng-click="startApplication('?json=true')" ...&gt;
  • 您的代码中是否有类似 browser.url 的调用,或者您是否出于本文的目的更改了它,以保护您正在测试的网站的真实 URL?因为/ 在大多数真实情况下都不太可能打开任何网站。
  • 我故意更改它以保护网站,是的,它按时加载。
  • 您能否使用browser.getSource() 而不是browser.click() 来验证网页源,因为它在点击尝试时被webdriver 看到?如果您没有告诉我们动态创建/加载元素,它可能会解释您的错误消息。
  • 是我使用.getSource 正在加载网站的所有元素,并且此页面上没有动态创建/加载任何元素。

标签: angularjs selenium css-selectors mocha.js webdriver-io


【解决方案1】:

您的选择器会查找属性为ng-click 且值为startApplication() 的元素。但是,您的 HTML 结构中没有这样的元素。有两个元素在 ng-click 上调用 startApplication() 函数,但在这两种情况下,该函数都需要一个属性。

您可以使用

选择具有ng-click 属性(无论其值如何)的任何元素
  • CSS:[ng-click]
  • XPath://*[@ng-click]

如果有很多元素具有ng-click 属性,但你只想要那些调用startApplication() 的元素(不管函数参数如何),你可以使用:

  • CSS:[ng-click^=startApplication]
  • XPath://*[contains(@ng-click, "startApplication")]

【讨论】:

  • 您是对的,但即使我将其更改为 browser.click("//*[contains(@ng-click, 'startApplication')]"); 仍然会出现同样的错误。即使我使用完整的 xpath //*[@id="inner-content"]/section/div/div/div[2]/div/a
  • @Danny Ahumada 按照上面的建议尝试使用browser.click('[ng-click^=startApplication]')
猜你喜欢
  • 2019-12-19
  • 1970-01-01
  • 2017-07-12
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多