webdriverio - 如何将 LI 文本放入数组
webdriverio - how to get a LI texts into an array
我今天早上开始将 webdriverio 与 cucumber 一起使用,一切都很顺利,直到我不得不检查元素列表 (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 的文本保存到一个数组中,我可以稍后查看,但是因为我有点不知道下一步该怎么做。
任何帮助将不胜感激..谢谢!
再拔几根头发后,我得出了这个解决方案:
@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}]")
我知道这不是最漂亮的解决方案,所以如果有人可以帮助我改进它,请告诉我。
谢谢
如果 属性 命令的选择器匹配多个元素,它 returns 一个结果数组而不是单个结果。因此,检查某个列表元素是否包含字符串的最简单解决方案是
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 断言,因此如果您使用不同的断言库,则需要对其进行调整。
我今天早上开始将 webdriverio 与 cucumber 一起使用,一切都很顺利,直到我不得不检查元素列表 (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 的文本保存到一个数组中,我可以稍后查看,但是因为我有点不知道下一步该怎么做。
任何帮助将不胜感激..谢谢!
再拔几根头发后,我得出了这个解决方案:
@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}]")
我知道这不是最漂亮的解决方案,所以如果有人可以帮助我改进它,请告诉我。
谢谢
如果 属性 命令的选择器匹配多个元素,它 returns 一个结果数组而不是单个结果。因此,检查某个列表元素是否包含字符串的最简单解决方案是
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 断言,因此如果您使用不同的断言库,则需要对其进行调整。