2016-05-17 22 views
1

我下面的例子中,爲了定義pageObjects內的元件,使用該ID選擇限定元件選擇器...Webdriver.io pageObject圖案 - 通過使參數

var Page = require('./page') 

var MyPage= Object.create(Page, { 
    /** 
    * define elements 
    */ 
    firstName: { get: function() { return browser.element('#firstName-0'); } }, 
    lastName: { get: function() { return browser.element('#lastName-0'); } }, 

... 

我尋找一種方法來通過一個可以讓我動態定義選擇器的參數。例如'#firstName-0'我想要'#firstName-' + i,所以我可以收集多個名字。

我已經試過

firstName: { get: function (i) { return browser.element('#firstName-' + i);}} 

然後在考試..

MyPage.firstName.get(0).setValue('foo'); 

但抱怨說get()不是一個函數。

Doe任何人有任何想法?

+0

請你試着改變以外的方法的名稱'得到'並更新。 – nullpointer

+0

對不起,不知道你在做什麼? –

+0

我猜測在訪問列表元素('list.get(index)')和調用方法(在你的情況'get(i)')中存在衝突,並且要確保它不是你'重新結束。 – nullpointer

回答

2

這裏有一個方法來定義一個屬性的功能與屬性描述:

var Page = require('./page') 

var MyPage= Object.create(Page, { 
    /** 
    * define elements 
    */ 
    firstName: { value: { get: function (i) { return browser.element('#firstName-' + i); } } }, 
... 

用法:

MyPage.firstName.get(0).setValue('foo'); 
+0

完美!謝謝!引起我注意的是我對「get」和「value」函數的理解不夠。你是否知道解釋這些是什麼以及如何/何時接到電話? –

+0

查看MDN:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create –