gpt4 book ai didi

javascript - 使用页面对象支持的 Protractor 测试多个浏览器

转载 作者:行者123 更新时间:2023-12-04 19:51:34 25 4
gpt4 key购买 nike

我正在编写一个测试,其中两个浏览器需要交互。简单地 fork 浏览器的问题是我的页面对象仍然引用旧浏览器。我不想重写我所有的 PO 以将浏览器作为参数,所以我尝试了在下面的链接中找到的第一个解决方案,他们用新浏览器的版本覆盖了全局变量:

Multiple browsers and the Page Object pattern

但是,更改全局变量似乎不起作用,因为我调用的所有后续页面对象函数都是针对原始浏览器实例执行的。我已经尝试在切换之前和之后记录窗口处理程序,它们确实不同,这只会让我更加困惑。这是一些代码。

规范:

var MultiBrowserFunctions = require('../common/multiBrowserFunctions.js');
var HomePage = require('../home/home.po.js');
describe('blah', function(){
it('blah', function(){
MultiBrowserFunctions.openNewBrowser(true);
HomePage.initializePage();
});
});

多浏览器功能:

(function() {
var browserRegistry = [];
module.exports = {
openNewBrowser: function(isSameUrl){
if(typeof browserRegistry[0] == 'undefined'){
browserRegistry[0] = {
browser: browser,
element: element,
$: $,
$$: $$,
}
}
var tmp = browser.forkNewDriverInstance(isSameUrl);
var id = browserRegistry.length;
browserRegistry[id] = {
browser: tmp,
element: tmp.element,
$: tmp.$,
$$: tmp.$$,
}
switchToBrowserContext(id);
return id;
},
resetBrowserInstance : function(){
browserRegistry.splice(1,browserRegistry.length);
switchToBrowserContext(0);
}
}

function switchToBrowserContext(id){
console.log('---------------------------switching to browser: ' + id);
browser=browserRegistry[id].browser;
element=browserRegistry[id].element;
$=browserRegistry[id].$;
$$=browserRegistry[id].$$;
}
}());

我的问题是:(1) 为什么这不起作用?(2) 是否有其他解决方案不涉及重写我所有的采购订单?

最佳答案

你可以做的是,将浏览器保存在不同的变量中,然后通过实用程序或其他东西覆盖全局变量来在它们之间切换。

describe('Switching browsers back and forth', function () {
var browserA, browserB;
it('Browser Switch', function () {
var browsers = {
a : browser,
b : browser.forkNewDriverInstance(true)
};
browserA = browsers.a;
browserB = browsers.b;

var browserAndElement = switchBrowser(browserB);
browser = browserAndElement.browser;
element = browserAndElement.element;
//do your stuff

var browserAndElement = switchBrowser(browserA);
browser = browserAndElement.browser;
element = browserAndElement.element;
//do your stuff
});
});

switchBrowser() 可以如下所示:

this.switchBrowser = function (currentBrowser) {
browser = currentBrowser;
element = currentBrowser.element;
return {
browser : browser,
element : element
}
}

通过这种方式,您不必重写您的 PO 来接受新的全局变量。希望对您有所帮助!

干杯

关于javascript - 使用页面对象支持的 Protractor 测试多个浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33481809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com