使用nightwatch.js断言webelements列表的文本值

我是使用nightwatch.js的新手。 我想得到一个元素列表,并validation给定string的每个元素的文本值。 我努力了 :

function iter(elems) { elems.value.forEach(function(element) { client.elementIdValue(element.ELEMENT) }) }; client.elements('css selector', 'button.my-button.to-iterate', iter); 

对于另一个stackoverflow问题,但我现在使用的是

 waitForElementPresent('elementcss', 5000).assert.containsText('elementcss','Hello') 

它正在返回我的输出

 Warn: WaitForElement found 5 elements for selector "elementcss". Only the first one will be checked. 

所以我希望它应该validation列表的每个元素的文本值。

所有的东西都不可能通过夜间js简单命令来完成,所以他们提供了自定义命令就是selenium协议。 在这里你可以拥有所有的selenium协议 。 我已经使用下面的代码来断言每个元素的文本值与给定的string“文本”。 希望它会帮助你

  module.exports = { '1. test if multiple elements have the same text' : function (browser) { function iter(elems) { elems.value.forEach(function(element) { browser.elementIdText(element.ELEMENT, function(result){ browser.assert.equal(result.value,'text') }) }) }; browser .url('file:///home/user/test.html') .elements('tag name', 'a', iter); } }; 

我的HTML片段

 <div id="test"> <a href="google.com" class='red'> text </a> <a href="#" class='red'> text </a> <a href="#" class='red'> text 1</a> </div> 

我能做到这一点:

 .elements('css selector', 'cssValue', function (elements) { for(var i=0;i<elements.value.length;i++){ var elementCss = 'div.search-results-item:nth-child(' + (i+1) + ') span'; client.assert.containsText(elementCss,'textValue'); } }) 

把你的函数放在for循环中,然后再使用

 client.elements('css selector', '#CollectionClass', function (result) { if(result.value.length > 1) { var count; for(count=1; count<result.value.length; count++) { result.value.forEach(function(element) { client.elementIdValue(element.ELEMENT); client.elementIdText(selectedHighlight.ELEMENT, function(resuddlt) { this.assert.equal(typeof resuddlt, "object"); this.assert.equal(resuddlt.status, 0); this.assert.equal(resuddlt.value, "your value"); }); } } } }; 

你已经说明了你所尝试过的(哪个是好的),但是你没有给我们提供消毒过的HTML来certificate这个问题(这会降低可能的答案的精确度)。

HTML中包含信息的方法有多种,内置的Nightwatch containsText将序列化在包含子结构的结构中find的任何文本。

例如,如果你有Juhibuild议,

 <div id="test"> <a href="google.com" class='red'> text </a> <a href="#" class='red'> text </a> <a href="#" class='red'> text 1</a> </div> 

然后断言

 .verify.containsText('#test', ' text ') // first one .verify.containsText('#test', ' text ') // second one .verify.containsText('#test', ' text 1') // third one 

将通过,因为他们每个validation具体的信息,而无需编写一个循环。 Nightwatch将查看test元素并将元素序列化为stringtext text text 1

现在如果因为其他原因需要循环,这是所有的学术,但你原来的问题似乎是针对如何获取文本信息,而不是如何执行一个可能的解决scheme(这是一个循环)。