我将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块,因为它不会在控制台上打印任何内容。
所以我的问题是:如何将浏览器对象及其功能正确地转移到另一种方法,以便我可以在那里完全使用它?
答案 0 :(得分:0)
@ T.J.Crowder帮助我克服了这个问题。非常感谢你!
我必须让我的测试异步。 所以解决方案代码是将done函数添加到testCase中:
customer_transaction[,sum(amount_spent),by=age_gr]