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

Ris*_*rma 3 angularjs protractor

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

 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());
      }
  });
};
Run Code Online (Sandbox Code Playgroud)

在执行时,我得到类似的东西:

{ ptor_: 
  { controlFlow: [Function],
     schedule: [Function],
     getSession: [Function],
     getCapabilities: [Function],
     quit: [Function],
Run Code Online (Sandbox Code Playgroud)

而不是建议的文本值.

Seg*_*g3r 15

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

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

  • 如果您稍微解释一下代码,这将是一个更好的答案. (2认同)

Sur*_*ali 7

我们需要指定 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);
});
Run Code Online (Sandbox Code Playgroud)

日志输出

['Home','About Us']
Run Code Online (Sandbox Code Playgroud)

需要更多的辅助功能


Sak*_*gla 2

要打印 getText() 中的值,您需要使用 .then() 解析 Promise

像这样的东西:

text[i].getText().then(function(textValue)
{
    console.log(textValue);
});
Run Code Online (Sandbox Code Playgroud)

问候,
萨克希