点击后打开非角度页面

ale*_*cxe 14 javascript testing end-to-end angularjs protractor

我正在尝试实现以下测试场景:

  • 点击页面上的徽标
  • 断言打开了一个新的浏览器窗口(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]);
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

失败的是:

错误:等待量角器与页面同步时出错:"在窗口中找不到角"

这是可以理解的.

我的第二次尝试是使用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]);
    });
Run Code Online (Sandbox Code Playgroud)

这实际上使得这个特定的测试通过没有任何错误,但它影响在此之后执行的每个测试,因为它browser是一个全局对象并且在测试之间共享 - 量角器不再与页面上的角度同步导致各种错误.

我该如何实施测试?


作为一种解决方法,我可以将restartBrowserBetweenTests设置更改为true并更改ignoreSynchronization值而不会出现任何问题 - 但它会大大减慢测试速度.

han*_*uan 14

ignoreSynchronization验证完成后,您可以设置为false.但请注意,ignoreSynchronization是同步的,而其他所有内容(click/get/etc)都是异步的,因此您需要小心.可能最安全的方法是在beforeEach中将其设置为true,在afterEach中将其设置为false,并且只测试该测试中的单个徽标单击.

  • 是的,在`afterEach()`中设置`ignoreSynchronization`回到`false`就可以了! (2认同)