【问题标题】:Access Child elements in Protractor访问量角器中的子元素
【发布时间】:2018-04-26 17:27:42
【问题描述】:

我正在尝试访问子元素的文本属性,但每次都获得空值。 DOM 如下所示

<div ng-repeater='abc'>
    <span class='xyz'>Mango</span>
</div>
<div ng-repeater='abc'>
    <span class='xyz'>Apple</span>
</div>

我试过下面的代码:

   var parent = element(by.repeater('abc'));
    var child = parent.all(by.xpath('//span[@class="xyz"]'));

    for (let index = 0; index < parent.count(); index++) {
      console.log("Value" + child.getText());
    }

我一直收到Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.的错误

我已经尝试将超时时间增加到 30 秒,页面加载正常,没有同步问题,但仍然出现错误。

我们将不胜感激。

【问题讨论】:

  • 当您可以通过一个 xpath 访问它时,您是否有任何特定原因希望通过 parent 访问它(没有单独的父子元素)
  • @AaryaHareendranath 没有具体原因我什至直接尝试使用 element.all(child element locator) 但问题是由于持续的异步问题,我在控制台中没有输出。如果你能帮我解决这个问题,我可能会在我的控制台中看到一些输出。

标签: jasmine protractor


【解决方案1】:
element.all(by.repeater('abc')).getText().then(function(txts){
   txts.forEach(function(txt){
      console.log(txt);
   })
})

// the `getText()` api will get visible text of all descendants of current element, 
// that's why parent node `div` can get the text on child node `span`

【讨论】:

  • 成功了。请帮助我理解代码,因为我无法理解您如何获取父元素的文本?
  • @SandeepRaulo .count() 返回一个承诺,所以你不能直接在循环中使用它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
  • 2020-09-12
相关资源
最近更新 更多