夜班 - 改变页面对象元素

时间:2017-07-18 09:20:57

标签: css xpath nightwatch.js

在程序运行时是否可以更改“页面对象”中“元素”部分中的元素?我在运行期间创建对象,我必须检查对象名称是否存在。

我按照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 模式?

enter image description here

2)虽然上面的“var page”对象使用页面对象模式,但是不能将参数作为字符串传递,它必须是我的页面对象文件中指定的“elements”部分的“元素”。该示例是否有效,因为它是“CSS选择器”?

谢谢!

1 个答案:

答案 0 :(得分:0)

您需要在元素中添加selectorlocateStrategy字段以指定您想要xpath,因为默认情况下在页面对象中使用CSS。

elements: {
    product:{
        locateStrategy :'xpath',
        selector : "//product[@data-product-name='%s']"
    }
}

你还应该有一个在页面对象中为你点击的功能。