如果我有一个使用页面对象模型的规范,如何为同一规范运行多个浏览器实例?
例如我有规范:
it('should run multi browser', function() {
browser.get('http://example.com/searchPage');
var b2 = browser.forkNewDriverInstance();
b2.get('http://example.com/searchPage');
var b3 = browser.forkNewDriverInstance();
b3.get('http://example.com/searchPage');
SearchPage.searchButton.click();
b2.SearchPage.searchButton.click(); //fails here
b3.SearchPage.searchButton.click();
});
如何为其他浏览器实例重用 SearchPage
页面对象中声明的变量?
最佳答案
这是一个非常有趣的问题,Using Multiple Browsers in the Same Test 中没有涵盖。或在 interaction_spec.js
.
页面对象的问题在于,页面对象字段通常是使用全局可用的元素
或浏览器
定义的,在您的情况下,它们始终指向第一个浏览器实例。但您基本上需要使用特定的浏览器调用 element()
:
b2.element(by.id('searchInput'));
而不仅仅是:
element(by.id('searchInput'));
仅供引用,element
只是 browser.element
的快捷方式。
我真的不确定这是否是一个可靠的解决方案并且实际上是否有效,但您可以重新定义 global element
这边走。将其视为将搜索上下文切换到不同的浏览器实例:
SearchPage.searchButton.click();
global.element = b2.element;
SearchPage.searchButton.click();
global.element = b3.element;
SearchPage.searchButton.click();
global.element = browser.element;
关于testing - 在同一测试规范中运行多个浏览器实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29157099/