2015-11-02 70 views
3

我正在编写一个测试,其中两个浏览器需要进行交互。简单分叉浏览器的问题是我的页面对象仍然引用旧的浏览器。我不想重写我的所有采购订单采取浏览器作为参数,所以我想在下面,他们覆盖全局变量与新的浏览器版本的链接找到的第一个解决方案:使用页面对象支持的量角器测试多个浏览器

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(); 
    }); 
}); 

MultiBrowserFunctions:

(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?

+0

1.有没有必要来包装你在出口封闭2.这里有没有足够的细节要弄清楚什么是错的。您提供的示例规范仅打开一个浏览器。你可以添加一个更详细的例子吗? –

回答

0

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

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 
    } 
} 

这样你不必重写您的POS采取新的全局。 希望它有帮助!

干杯

相关问题