今天早上我开始使用带有黄瓜的webdriverio,一切都很顺利,直到我必须检查元素列表(ul> li)是否包含特定文本。我开始玩:http://webdriver.io/api/protocol/elements.html
这是我到目前为止所做的:
@Then /^One error should be "([^"]*)"$/, (errorMessage, cb) ->
that = @
errors = []
@client
.elements '.ui .list > li', (err, res) ->
_.forEach res.value, (item) ->
that.client
.elementIdText item.ELEMENT, (err, res) ->
errors.push(res.value)
我的想法是尝试将所有li文本保存到一个我可以稍后检查的数组中,但是因为我对下一步该做什么感到很遗憾。
任何帮助都将非常感谢..谢谢!
答案 0 :(得分:4)
如果属性命令的选择器与多个元素匹配,则返回结果数组而不是单个结果数组。因此,检查某个列表元素是否包含字符串的最简单的解决方案是
client.getText('.ui .list>il', function(err, res) {
var containsText = false;
res.forEach(function(liText) {
containsText |= liText.indexOf('some string') > -1;
});
containsText.toBe(true);
});
我在这里使用jasmine断言,所以如果你使用不同的断言lib,你需要适应它。
答案 1 :(得分:0)
在拔出几根头发后,我推出了这个解决方案:
@Then /^One error should be "([^"]*)"$/, (errorMessage, cb) ->
that = @
@client
.elements '.ui .list > li', (err, res) ->
total = res.value.length
errors = []
for item in res.value
that.client
.elementIdText item.ELEMENT, (err, res1) ->
errors.push res1.value
if errors.length == total
if errors.indexOf(errorMessage) != -1
cb(null, errors)
else
cb("Expected error string: \"#{errorMessage}\" not found in: [#{errors}]")
我知道这不是最美丽的解决方案,所以如果那里有人可以帮助我做得更好,请告诉我。
由于