如何获取量角器中所有元素的文本

时间:2015-04-08 20:19:05

标签: angularjs protractor

我想在google搜索栏" Webdriver"中输入后,获取所有li个建议文本。我写了一些像这样的代码:

 this.getElements = function(){
  element.all(by.css('ul.sbsb_b')).then(function(text){
      for(var i=0; i < text.length;i++)
      {
          console.log(text[i].getText());
      }
  });
};

执行时,我得到的结论是:

{ ptor_: 
  { controlFlow: [Function],
     schedule: [Function],
     getSession: [Function],
     getCapabilities: [Function],
     quit: [Function],

而不是建议的文字值。

6 个答案:

答案 0 :(得分:12)

Protractor中有一组类似javascript数组的函数,允许你过滤()或map()async promise的结果。例如,如果原始&#34; element.all(by.css(&#39; something&#39;))&#34;将返回ElementFinders的列表,map()允许将其转换为getText()的数组,其在解析状态下只是一个字符串数组。然后,您可以随意使用它。

element.all(by.css('something')).map(function(elm) {
  return elm.getText();   
}).then(function(texts) {
  texts.forEach(...);
});

答案 1 :(得分:3)

要循环遍历每个元素,您还可以执行以下操作:

element.all(by.css('ul.sbsb_b')).each(function(element, index) {
    element.getText().then(function(text) {
        console.log(text);
    });
});

http://angular.github.io/protractor/#/api?view=ElementArrayFinder.prototype.each

答案 2 :(得分:3)

我们需要指定getText()来获取element.all

中的文本列表
<ul class="menu">
   <li>Home</li>
   <li> About Us</li>  
</ul> 

element.all(by.css('.menu li')).getText().then(function(menus) {
    expect(menus.length).toBe(2); //true
    console.log(menus);
});

日志输出

['Home','About Us']

需要更多helper function

答案 3 :(得分:0)

要从getText()打印值,您需要使用.then()来解析承诺

这样的事情:

text[i].getText().then(function(textValue)
{
    console.log(textValue);
});

的问候,
Sakshi

答案 4 :(得分:0)

你应该做下一步

this.getElements = function(){
  element.all(by.css('ul.sbsb_b')).getText().then(function(text){
      console.log(text);
  });
};

答案 5 :(得分:0)

这是一个古老的问题但仍然在我做了someElementSelector.getText();我有一个字符串而不是数组,所以我根据'\ n'

分割字符串

例如

someElementSelector.getText().then(function(text){
  var arrayA = text.split("\n");
// this gives me ['one','two','three'] 
})

这为我们提供了一个包含多个文本的元素的文本数组。