一尘不染

单击后打开非角度页面

angularjs

我正在尝试实施以下测试方案:

  • 单击页面上的徽标
  • 断言有一个新的浏览器窗口打开(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]);
        });
    });
});

失败与:

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

这是可以理解的。

我的第二次尝试是使用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设置更改为,true并更改ignoreSynchronization值-但这会大大降低测试速度。


阅读 178

收藏
2020-07-04

共1个答案

一尘不染

ignoreSynchronization验证完成后,您可以将其设置为false。但是,请注意,ignoreSynchronization是同步的,而其他所有东西(click
/ get /
etc)都是异步的,因此您需要注意这一点。可能最安全的方法是在beforeEach中将其设置为true,在afterEach中将其设置为false,然后在该测试中测试单个徽标单击。

2020-07-04