【发布时间】:2015-02-14 00:29:08
【问题描述】:
我正在尝试实现以下测试场景:
- 单击页面上的徽标
- 断言打开了一个新的浏览器窗口(Chrome 中的选项卡)并检查当前 URL
问题是在新的浏览器窗口中打开的页面是一个非角度页面,而我正在执行点击的主页是一个有角度的页面 .
这是我的第一次尝试:
it("should show logo", function () {
var logo = scope.page.logo;
expect(logo.isDisplayed()).toEqual(true);
// opens a new page on click
logo.click().then(function () {
browser.getAllWindowHandles().then(function (handles) {
browser.switchTo().window(handles[1]).then(function () {
expect(browser.getCurrentUrl()).toEqual('http://myurl.com/');
});
// switch back to the main window
browser.switchTo().window(handles[0]);
});
});
});
失败:
错误:等待 Protractor 与页面同步时出错: “在窗口上找不到角度”
这是可以理解的。
我的第二次尝试是使用 ignoreSynchronization 布尔标志:
browser.ignoreSynchronization = true;
logo.click().then(function () {
browser.getAllWindowHandles().then(function (handles) {
browser.switchTo().window(handles[1]).then(function () {
expect(browser.getCurrentUrl()).toEqual('http://myurl.com/');
});
// switch back to the main window
browser.switchTo().window(handles[0]);
});
这实际上使这个特定的测试通过而没有任何错误,但它会影响在此之后执行的每个测试,因为browser 是一个全局对象并且在测试之间共享 - 量角器不再与页面上的角度同步,从而导致各种错误。
我应该如何实施测试?
作为一种解决方法,我可以将 restartBrowserBetweenTests setting 更改为 true 并更改 ignoreSynchronization 值而不会出现任何问题 - 但它会显着减慢测试速度。
【问题讨论】:
标签: javascript angularjs testing protractor end-to-end