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

标签 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 = 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/

相关文章:

python - Python 中的 A/B 拆分测试有哪些资源?

ruby-on-rails - 我应该如何对这个模块进行单元测试?

java - 如何使用 PageFactory.initElement(driver, this) 的索引号来识别 DOM 中两个相同的元素?

java - 如何单击位于表格 Selenium 单元格中的元素

javascript - 如何访问其他文件中的函数?

xcode - 使用 Xcode 在开发人员之间共享测试,这是怎么回事?

ruby - 使用 Ruby 访问哈希中哈希中的键值对

javascript - 如何使用 Protractor promise 调用执行函数调用

javascript - 使用 Protractor -webdrivers 的 Safari 历史导航中的未知错误

angularjs - 使用 Saucelabs 上传 Protractor 文件