【问题标题】:Select a dynamic number inside a span在范围内选择一个动态数字
【发布时间】:2017-05-06 20:48:09
【问题描述】:

我正在使用带有 selenium 和量角器的自动化框架,用 JavaScript 编码。但是,应用程序的这一部分是在没有 Angular 的情况下制作的。我有一个带有加号和减号按钮的数量字段来增加数字。我需要为我的测试选择号码本身。

这是带有“2”作为数字的 DOM

<div class="modify-product padding-lg-top hide-on-review">
 <b data-lang-key="store.qty">Qty:</b>
 <span class="modify-action">
  <span class="remove">-</span>
  <span class="product-quantity">2</span>
  <span class="add">+</span>
 </span>
</div>

如果我在控制台中使用 JQuery,我可以通过以下方式选择 2:

$('.cart-product .product-quantity').text()

现在在 selenium 中,我正在尝试使用以下选择器:

return element(by.css('.cart-product .product-quantity').text())

到目前为止,这被证明是不成功的。我也尝试过 .val() 和其他一些方法,但我尝试的所有方法都返回整个 span 元素或返回未定义。

想法?

【问题讨论】:

  • 我仍然收到错误 TypeError: element(...).text is not a function
  • 不是text。您需要使用getText ()。
  • 无论获取文本的方法是什么,都不应该在元素对象上调用吗?而不是目前使用的内部。找到元素然后获取像 element(by.css('css_selector')).getText() 这样的文本

标签: javascript jquery angularjs selenium protractor


【解决方案1】:

查看以下链接。

Link 1

Link 2

重要提示 - 切勿将 xpath 用于此类场景

【讨论】:

    【解决方案2】:
    return element(by.className('product-quantity')).getText();
    

    记住getText()返回一个promise。所以你必须使用then()来获取值

    【讨论】:

      【解决方案3】:

      请记住,量角器方法总是返回 Promise,因为它们是异步操作。您的测试应如下所示:

      let quantities = element.all(by.css('.product-quantity'));
      quantities.get(0).then(function(el) {
        expect(el.getText()).to.become('2');
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-09
        相关资源
        最近更新 更多