众所周知,您永远不会知道太多的端到端测试框架,为此我使用Nightwatch.js编写了一个基本实现。事情很有效,但我注意到“switchWindow()”函数的问题。基本上,我启动框架,打开一个窗口,然后打开第二个。我写了一个函数
function switchWindow(win) {
client.windowHandles(function(result) {
var newWindow = result.value[win]
this.switchWindow(result.value[win]);
});
}
它接受一个输入,告诉它切换到哪个窗口然后它应该改变窗口。控制肯定是在两个窗口之间移动。例如,如果我在第二个窗口,那么我调用该函数切换到第一个,执行一些操作并检查操作是否成功,它在第一个窗口上进行更改并根据该测试进行测试回绿。但是,我从未真正看到浏览器移动到第一个窗口,它始终保持在最后一个窗口打开(第二个窗口。)
问题在于,一个窗口中的更改会更改浏览器本地存储,而其他窗口会有一个事件侦听器,它会等待更改并根据这些存储更改更新自己的页面内容。但是,如果控件位于第一个窗口上,则更新不会正确地转移到第二个窗口,而窗口不会来回切换。如果我暂停执行(使用.pause()方法)并在窗口之间手动点击,则会发生更新。如果我没有更新没有正确结转,那么当我检查备用页面是否与第一个同步更新时,测试失败。我可以解决这个问题,但结果是一个相当脆弱的丑陋测试流程。
所以这回到了我的主要问题,即为什么Chrome实际上不是在浏览器之间切换而不是仅仅来回弹跳控制?有没有办法让它这样做?