Testing 在同一测试规范中运行多个浏览器实例

Testing 在同一测试规范中运行多个浏览器实例,testing,protractor,pageobjects,end-to-end,Testing,Protractor,Pageobjects,End To End,如果我有一个使用页面对象模型的规范,如何为同一规范运行多个浏览器实例 例如,我有一个规范: it('should run multi browser', function() { browser.get('http://example.com/searchPage'); var b2 = browser.forkNewDriverInstance(); b2.get('http://example.com/searchPage'); var b3 = brow

如果我有一个使用页面对象模型的规范,如何为同一规范运行多个浏览器实例

例如,我有一个规范:

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
page对象中声明的vars?

这是一个非常有趣的问题,本文或中未涉及

页面对象的问题在于,页面对象字段通常使用全局可用的
元素
浏览器
来定义,在您的情况下,这些元素总是指向第一个浏览器实例。但您基本上需要使用特定浏览器调用
element()

b2.element(by.id('searchInput'));
而不仅仅是:

element(by.id('searchInput'));
仅供参考,
element
只是
browser.element
的快捷方式


我真的不确定这是否是一个可靠的解决方案,是否真的有效,但您可以重新定义这种方式。将其视为将搜索上下文切换到不同的浏览器实例:

SearchPage.searchButton.click();

global.element = b2.element;
SearchPage.searchButton.click();

global.element = b3.element;
SearchPage.searchButton.click();

global.element = browser.element;

这个答案有助于解决这个问题吗?谢谢