在程序运行时是否可以更改“页面对象”中“元素”部分中的元素?我在运行期间创建对象,我必须检查对象名称是否存在。
我按照here中的示例:
对象页面:
module.exports = {
url: function() {
return 'https://' + this.api.globals.host + '/#/products/';
},
elements: {
product: ".product[data-product-name='%s']"
},
comands: [{
el: function(elementName, data) {
var element = this.elements[elementName.slice(1)];
return util.format(element.selector, data);
}
}]
};
测试程序:
'my test': function (browser) {
var page = browser.page.myPage();
page.click(page.el('@product', 'milk')); // .product[data-product-name='milk']
}
到目前为止一切正常。虽然它返回一个选择器字符串,但该字符串是正确的。但我遇到两个问题:
1)测试正在搜索字符串名称,因此,我使用 XPath
选择器,但 Nightwatch
切换回“ CSS选择器“。有没有办法让Nightwatch保持在 XPath
模式?
2)虽然上面的“var page”对象使用页面对象模式,但是不能将参数作为字符串传递,它必须是我的页面对象文件中指定的“elements”部分的“元素”。该示例是否有效,因为它是“CSS选择器”?
谢谢!
答案 0 :(得分:0)
您需要在元素中添加selector
和locateStrategy
字段以指定您想要xpath,因为默认情况下在页面对象中使用CSS。
elements: {
product:{
locateStrategy :'xpath',
selector : "//product[@data-product-name='%s']"
}
}
你还应该有一个在页面对象中为你点击的功能。