使用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(这是一个循环)。