我想在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],
而不是建议的文字值。
答案 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']
})
这为我们提供了一个包含多个文本的元素的文本数组。