作为我的 nightwatch.js 测试的一部分,我有以下代码将列出元素的所有值(在本例中为英国城镇的列表);
"Page 2 Location SEO Crawl paths are displayed": function (browser) {
browser.elements('xpath', '//a[contains(@href,"location")]', function (results) {
results.value.map(function(element) {
browser.elementIdAttribute(element.ELEMENT, 'innerText', function(res) {
var resme = res.value;
console.log(resme)
});
});
});
},
这样可以正确列出所有元素值;
我现在想做的是检查结果中是否列出了诺丁汉,如果没有,则失败。
我安装了 assert npm软件包以查看是否有帮助,这将我的代码更改为;
"Page 2 Location SEO Crawl paths are displayed": function (browser) {
browser.elements('xpath', '//a[contains(@href,"location")]', function (results) {
results.value.map(function(element) {
browser.elementIdAttribute(element.ELEMENT, 'innerText', function(res) {
var resme = res.value;
console.log(resme);
if (resme.includes("Nottingham")) {
assert.ok(true);
}
else {
assert.ok(false);
}
});
});
});
},
但是这不起作用,因为我不断收到以下错误;
正在使用 assert 软件包进行测试的最佳方法,或者存在一种更直接的方法来断言 Nottingham 已包含在此列表中,并且测试<如果不是,则strong>失败。
我尝试使用resme.includes("Nottingham")
,但这不会使测试失败。
任何帮助将不胜感激。
谢谢。
答案 0 :(得分:0)
看起来像对每个项目都调用了最内部的函数(将res作为参数的函数),并且resme是您当前正在迭代的项目,而不是数组,因此include函数无法按预期工作。 / p>
我对该库不熟悉,但我想您必须执行以下操作:
"Page 2 Location SEO Crawl paths are displayed": function (browser) {
var found = false;
browser.elements('xpath', '//a[contains(@href,"location")]', function (results) {
results.value.map(function(element) {
browser.elementIdAttribute(element.ELEMENT, 'innerText', function(res) {
var resme = res.value;
console.log(resme);
if (resme === "Nottingham") {
found = true;
// Maybe return something like null or 0 to stop iterating (would depend on your library).
}
});
});
});
assert.ok(found)
},
您初始化一个具有错误值的变量“ found”,并在遍历每个值时将其设置为true(如果找到)。 (可选)您应该在此时中断迭代。整个过程完成后,断言您已找到所需的值。