2016-05-17 9 views
1

ich nach dem Beispiel, um Elemente innerhalb pageObjects zu definieren, die ID-Selektor ...Webdriver.io Pageobject pattern - definieren Wählelement durch Argument übergeben

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'); } }, 

... 

ich einen Weg suchen passieren ein Argument, mit dem ich den Selektor dynamisch definieren könnte. z.B. '#firstName-0' Ich hätte gerne '#firstName-' + i, also könnte ich mehrere Vornamen sammeln.

Ich habe

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

dann im Test ..

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

aber es beschwert sich, dass get() keine Funktion ist.

Doe jemand Ideen haben?

+0

könnten Sie bitte versuchen, den Namen der anderen Methode zu ändern, als 'erhalten 'und aktualisieren. – nullpointer

+0

Entschuldigung, nicht sicher, was Sie bekommen? –

+0

Ich vermute, dass es einen Konflikt beim Zugriff auf Elemente einer Liste ('list.get (index)') gibt und eine Methode hier aufruft (in Ihrem Fall 'get (i)') und sicherstellen will, dass Sie nicht ' Ende in. – nullpointer

Antwort

2

Hier ist ein Weg, um eine Funktion auf einem Grundstück mit einem Eigenschaftendeskriptor zu definieren:

var Page = require('./page') 

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

Verbrauch:

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

Perfekt! Vielen Dank! Was mich überrascht hat, ist mein mangelndes Verständnis für die Funktionen "get" und "value". Weißt du irgendwo, was das ist und wie/wann sie aufgerufen werden? –

+0

Werfen Sie einen Blick auf MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create –