2017-07-18 237 views
0

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

我跟着例如,从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网页”对象使用的页面对象图案是不可能将参数传递,因为它具有从“元素”是一个“元素”指定部分的字符串在我的页面对象文件中。该示例仅适用于“CSS选择器”吗?

谢谢!

回答

0

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

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

你还应该有一个函数,在页面对象中为你做点击操作。