【发布时间】:2015-11-02 16:02:26
【问题描述】:
我正在编写一个需要两个浏览器交互的测试。简单地分叉浏览器的问题是我的页面对象仍然引用旧浏览器。我不想重写我所有的 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) 是否有其他不涉及重写我所有 po 的解决方案?
【问题讨论】:
-
1.没有必要将你的导出包装在一个闭包中 2。这里没有足够的细节来找出问题所在。您提供的示例规范仅打开一个浏览器。你能添加一个更详细的例子吗?
标签: javascript protractor pageobjects