2017-07-18 91 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']" 
    } 
} 

你還應該有一個函數,在頁面對象中爲你做點擊操作。