我的所有页面对象都是这样的:
elements: {
header: {
locateStrategy: 'xpath',
selector: "//h3[text()='Welcome']"
},
loginButton: {
locateStrategy: 'xpath',
selector: "//button[text()='Login']"
},
forgotPasswordLink: {
locateStrategy: 'xpath',
selector: "//a[text()='Forgot Password?']"
},
signupButton: {
locateStrategy: 'xpath',
selector: "//button[text()='Signup']"
}
如果我可以说"在任何地方使用xpath"那会更好。 - 那将彻底崩溃
The docs说您应该可以在"测试设置"中设置"use_xpath" : true
,但我已经在nightwatch.json中可以看到的所有地方尝试过,{它没有任何效果。
(如果它们意味着此设置将影响页面对象文件中的声明,则无论如何都不完全清楚:示例仅显示它影响测试用例中的次要断言调用)。
答案 0 :(得分:3)
您可以使用这样的javascript函数(取决于您最喜欢的创建对象的方式):
var xSelector = function (selector) {
return {
selector: selector,
locateStrategy: 'xpath'
}
};
然后像这样使用它:
elements: {
xxx: xSelector('//a[text()="Bank Details"]')
createStepButton: { selector: '#menu-create-item' },
}
提示:在上面的示例中,createStepButton仍在使用css选择器策略。还要考虑创建一个cssSelector函数,以便元素部分具有统一的可读性。
答案 1 :(得分:3)
尝试设置: “ use_xpath”:是
在nightwatch.conf.js文件中,而不是nightwatch.json
为我工作:)
答案 2 :(得分:0)
为了解决这个问题,你可以遍历你的元素并为每个元素设置任何给定的定位策略,如下所示:
var pageObject = {
url: 'https://google.com',
elements: {
myFirstElement: {
selector: "//div[@class='my-first-el']"
},
mySecondElement: {
selector: "//div[@class='my-seconds-el']"
}
}
};
for (var el in pageObject.elements){
pageObject.elements[el]["locateStrategy"] = "xpath";
}
module.exports = pageObject;
答案 3 :(得分:0)
也许会帮助某人。
尝试设置:
"use_xpath": true
在您的 nightwatch.json
中