2016-01-21 3 views
0

Я использую webdriver-io v3.x в сочетании с Mocha. Чтобы иметь возможность тестировать идентичные компоненты на разных сайтах, я хотел бы передать аутсорсинг на дополнительную функцию. Для этого мне нужно передать объект браузера через какой-то PassByReference для этой дополнительной функции. Как я могу это сделать?Как передать браузер webdriver-io Объект через PassByReference

Пример кода:

// [...] 

// this function shall be callable from every TestCase. 
var testObject = function(browser) { 
    return browser 
     .getText('.InfoText') 
      .then(function(txt) { 
       console.log('txt: ' + txt); 
       txt.should.equal('Information'); 
      }); 
}); 

describe('Sample Test Suite', function() { 

    // go to a webpage for testing 
    before(function() { 
     browser 
      .url('http://example.com'); 
    }); 

    // refer to the test definitions in the function testObject(browser) 
    it('sample test case', function() { 
     return testObject(browser); 
    }); 

}); 

Я могу распечатать все атрибуты объекта браузера в функции TestObject, поэтому функция как

for(var attribute in browser) { 
    console.log('browsers attributes: ' + attribute); 
}; 

бы перечислить все (и несколько больше) Функции webdriver-io, определенные в API:

$ browsers attributes: defer 
$ browsers attributes: promise 
$ browsers attributes: lastPromise 
$ browsers attributes: desiredCapabilities 
$ [...] 
$ browsers attributes: getTabIds 
$ browsers attributes: getTagName 
$ browsers attributes: getText 
$ browsers attributes: getTitle 
$ browsers attributes: getUrl 
$ browsers attributes: getValue 
$ browsers attributes: getViewportSize 
$ browsers attributes: hold 
$ browsers attributes: isEnabled 
$ browsers attributes: isExisting 
$ browsers attributes: isSelected 
$ browsers attributes: isVisible 
$ [...] 

Но, к сожалению, функция лоб ser.getText() в моем методе testObject, похоже, никогда не достигает блока then, так как он ничего не выводит на консоль.

Итак, мой вопрос: как я могу правильно передать объект браузера с его функциональными возможностями другому методу, чтобы я мог его полностью использовать?

+0

Это не имеет ничего общего с проходом по ссылке, которая является термином, при вычислении значения передачи ссылки к ** переменному ** в функцию, чтобы функция могла изменять содержимое ** ** **. Вы передаете ссылку на объект в функцию через значение, которое вам нужно здесь. Проблема - это * время *, а не то, что вы проходите. –

+0

Подробнее о тестировании async в Mocha (я * думаю * вы используете Mocha за селеновым битом): http://mochajs.org/#asynchronous-code Хотя он уверен, что мне кажется, что вы возвращаете обещание от ' testObject' и, в свою очередь, от 'it' callback ... –

+0

@TJCrowder вы совершенно правы. Я забыл об этом. Большое спасибо за Вашу помощь! :) –

ответ

0

@ T.J.Crowder помог мне преодолеть эту проблему. Большое спасибо!

Мне нужно сделать асинхронное тестирование. Поэтому коды решения добавить сделана функцию в TestCase:

// refer to the test definitions in the function testObject(browser) 
it('sample test case', function(done) { 
    return testObject(browser) 
       .then(done); 
}); 
Смежные вопросы