量角器使用element.all

时间:2016-05-12 14:08:52

标签: angularjs selenium webdriver protractor

我需要做一个断言来检查'elements.all'中是否存在元素。

我的第一个想法是运行一个for循环并将期望放在里面。不是一个好主意,因为它正在检查列表中的每个项目。所以如果我有30个项目,我最终可能会失败29个。

element.all(by.css(element)).then(function(itemList) {
  console.log("Total values in dropdown are: " + itemList.length);
  for (i = 0; i < itemList.length; i++) {
    itemList[i].getText().then(function(text) {
      console.log(text);
      expect(text).toEqual('whatever-i-need-to-assert');
    });
  };
});

为了解决这个问题,我嵌套了一个IF'语句,它将“预先检查”字符串匹配。另一个坏主意,因为如果没有匹配,我的期望永远不会运行,因此,给我一个错误的传递:

element.all(by.css(".item a.gc-exercises-link")).then(function(itemList) {
  console.log("Total values in dropdown are: " + itemList.length);
  for (i = 0; i < itemList.length; i++) {
    itemList[i].getText().then(function(text) {
      console.log(text);
      if (text == 'BOATLIFT-EXERCISE') {
        console.log('Match');
        expect(text).toEqual('BOATLIFT-EXERCISE');
      } else {
        console.log('No Match');
      };
    });
  };
});

显然,我在错误的道路上。有人可以让我知道在使用element.all时如何正确期望'Text'。我只需要证明上述列表中有文字。

谢谢!

3 个答案:

答案 0 :(得分:3)

这是一个示例,用于检查是否存在与文本&#34;条款&#34;的链接。在页面中:

bootstrap/app.php

请注意,对于每个元素,量角器需要插入浏览器,这可能会很慢,尤其是在有很多元素的情况下。

更快的解决方案是检查XPath中是否存在至少一个元素,包括预期的文本:

browser.get('https://www.google.co.uk/');
expect(element.all(by.css('a')).getText()).toContain('Terms');

答案 1 :(得分:1)

如果您只想检查它是否存在(并且其他列表项不会干扰),您可以在{。{1}}之前的element.all之后调用数组上的.getText()并使用{{1} }

.then

或者如果你知道索引:

toContain()

作为旁注:您可以使用element.all(by.css(".item a.gc-exercises-link")).getText().then(function(itemList) { expect(itemList).toContain('some text'); }; 代替创建for循环https://angular.github.io/protractor/#/api?view=ElementArrayFinder.prototype.each

答案 2 :(得分:0)

您可以使用过滤功能。

$$("span").filter(function(elem,index){
    return elem.getText().then(function(txt){
        return txt === 'text to compare';
    });
}).then(function(eleList){   // you get the list of elements containing the text here
    console.log(eleList.length);
});