如何通过PassByReference传输webdriver-io的浏览器对象

时间:2016-01-21 17:33:47

标签: javascript selenium mocha webdriver-io

我将webdriver-io v3.x与Mocha结合使用。 为了能够在不同的站点上测试相同的组件,我希望将测试外包给额外的功能。 为了实现这一点,我必须通过某种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);
};

将列出API中定义的所有(以及更多)webdriver-io函数:

$ 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
$ [...]

但遗憾的是,我的方法testObject中的函数browser.getText()似乎永远不会到达then块,因为它不会在控制台上打印任何内容。

所以我的问题是:如何将浏览器对象及其功能正确地转移到另一种方法,以便我可以在那里完全使用它?

1 个答案:

答案 0 :(得分:0)

@ T.J.Crowder帮助我克服了这个问题。非常感谢你!

我必须让我的测试异步。 所以解决方案代码是将done函数添加到testCase中:

customer_transaction[,sum(amount_spent),by=age_gr]