如何使 Nightwatch 在页面对象文件中默认使用 xpath
How to make Nightwatch use xpath by default in page object files
我所有的页面对象看起来像这样:
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']"
}
如果我能说 "use xpath everywhere" 会更好 - 那会彻底崩溃
The docs 说你应该可以在你的 "test settings" 中设置 "use_xpath" : true
,但我在 nightwatch.json 中可以看到的所有地方都试过了,它没有任何效果。
(不完全清楚他们是否表示此设置会影响页面对象文件中的声明,无论如何:该示例仅显示它影响测试用例中的后续断言调用)。
您可以像这样使用 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 函数以实现元素部分的统一可读性。
要解决这个问题,您可以遍历元素并为每个元素设置任何给定的定位策略,如下所示:
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;
也许它会对某人有所帮助。
尝试设置:
"use_xpath": true
在你的nightwatch.json
尝试设置:
"use_xpath": true
在 nightwatch.conf.js
文件中,而不是 nightwatch.json
对我有用:)
我所有的页面对象看起来像这样:
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']"
}
如果我能说 "use xpath everywhere" 会更好 - 那会彻底崩溃
The docs 说你应该可以在你的 "test settings" 中设置 "use_xpath" : true
,但我在 nightwatch.json 中可以看到的所有地方都试过了,它没有任何效果。
(不完全清楚他们是否表示此设置会影响页面对象文件中的声明,无论如何:该示例仅显示它影响测试用例中的后续断言调用)。
您可以像这样使用 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 函数以实现元素部分的统一可读性。
要解决这个问题,您可以遍历元素并为每个元素设置任何给定的定位策略,如下所示:
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;
也许它会对某人有所帮助。
尝试设置:
"use_xpath": true
在你的nightwatch.json
尝试设置:
"use_xpath": true
在 nightwatch.conf.js
文件中,而不是 nightwatch.json
对我有用:)