【问题标题】:fetching element from 2nd element of array protractor从数组量角器的第二个元素中获取元素
【发布时间】:2017-03-06 09:57:27
【问题描述】:

我在一个页面上有 4 个相同的容器框。我把它们都放在一个数组中。现在每个容器盒都包含一些相同的元素。我想从第一个容器中获取第二个元素。 以下是我用来获取容器的内容,它工作正常:

var pageContent = element(by.css('[class="main-content"]'));
expect(pageContent.all(by.css('.modularBoxContent')).count()).tobe(4);

现在,如果我想获取类为 labelText 内部模块化框容器的所有元素的计数,我可以使用以下方法来做到这一点:

 expect(pageContent.all(by.css('.modularBoxContent')).all(by.css('[class="labelText"]')).count()).tobe(10);

但这给了我所有 4 个容器中的 labelText。我想仅在第一个容器中获取 labelText 的计数,或者在第一个容器中获取第一个 labelText 的文本。我尝试了下面的代码,但它不起作用并收到错误消息

TypeError: this.pageContent.get 不是函数

expect(pageContent.get(0).all(by.css('.modularBoxContent')).all(by.css('[class="labelText"]')).count()).tobe(3);

我也在下面尝试过,但效果不佳。 为此也得到与上述相同的错误。

 expect(pageContent.all(by.css('.modularBoxContent')).get(1).all(by.css('[class="labelText"]')).get(0).getText()).tobe(3);

有人可以建议正确的用法吗?

【问题讨论】:

  • 你能详细说明“它不工作”是什么意思吗?有错误吗?您是否在检索错误的元素?等
  • @Gunderson 在我的帖子中添加了错误消息。我收到错误说明 get 不是函数。此外,我认为这不是检索元素的正确方法,所以我不确定。
  • 你不能在单个元素上调用.get(),只能在元素数组上调用。如果是var pageContent = element.all(by.css('[class="main-content"]'));,它会起作用。那么 4 个主要容器是否都具有 main-content 类?
  • 是的。没错。它们都在 main-content 下

标签: selenium protractor


【解决方案1】:

我认为这应该适合你,让我们试试这个。由于所有容器都具有相同的类,因此使用.all() 创建一个数组并使用.get() 检索所需的索引。

var pageContent = element(by.css('.main-content'));
var firstContainer = pageContent.all(by.css('.modularBoxContent')).first(); // or could have used .get(0);

一旦您的第一个容器被成功识别,现在您只需链式调用定位器来查找它下面的所有子容器。既然你说你想要第一个容器下的第二个元素,我们将使用.get(1)(1 是索引,所以它是数组中的第二项)。

var secondChild = firstContainer.all(by.css('[class="labelText"]')).get(1);

而且,仅供参考,如果您愿意,其中很多内容可能会被重构为更短。例如,您可以链接您的 CSS 调用,无需将它们分开:

上面的代码应该是这样的:

var firstContainer = element.all(by.css('.main-content .modularBoxContent')).first();
var secondChild = firstContainer.all(by.css('.labelText')).get(1);

【讨论】:

  • 我认为有些混乱。我只有一个带有class = .main-content 的元素。现在在这个下我有不同的容器,名称和类与modularBoxContent 相同,在这个下我有不同的标签,与.labelText 相同的类我想在每个容器下获取.labelText 的计数,并从第一个容器中获取第一个 labelText .
  • var firstContainer = element.all(by.css('.main-content')).first(); 不会给我第一个容器,因为容器类是 .modularBoxContent
  • 我使用了下面的代码,但它不起作用var firstcontainer = element.all(by.css('.modularBoxContent')).first(); expect(firstContainer.all(by.css('.labelText')).count()).tobe(10);得到错误声明Expected 0 to be 10
  • @NewWorld 哦,好吧,我稍微更新了我的答案(再次查看 firstContainer 定位器)。如果我理解正确,.modularBoxContent 是所有容器,所以调用.all().first() 应该会给你想要的吗?
  • 谢谢。我认为大部分都有效,但我不确定如何访问第二个或第三个容器? second() 或 third() 是否有效,因为它们不适合我?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
相关资源
最近更新 更多