javascript - 单击后打开的非 Angular 页面

标签 javascript angularjs testing protractor end-to-end

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

  • 点击页面上的 Logo
  • 断言打开了一个新的浏览器窗口(Chrome 中的选项卡)并检查当前 URL

问题是在新浏览器窗口中打开的页面是一个非 Angular 页面,而我在其中执行点击的主页是一个 Angular 页面 .

这是我的第一次尝试:

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

失败:

Error: Error while waiting for Protractor to sync with the page: "angular could not be found on the window"

这是可以理解的。

我的第二次尝试是尝试使用 ignoreSynchronization bool 标志:

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 是一个全局对象并且在测试之间共享 - Protractor 不再与 Angular 同步导致各种错误的页面。

我应该如何实现测试?


作为解决方法,我可以更改 restartBrowserBetweenTests settingtrue 并更改 ignoreSynchronization 值没有任何问题 - 但它会显着降低测试速度。

最佳答案

验证完成后,您可以将 ignoreSynchronization 设置为 false。但是,请注意 ignoreSynchronization 是同步的,而其他所有内容(单击/获取/等)都是异步的,因此您需要小心。可能最安全的方法是在 beforeEach 中将其设置为 true,在 afterEach 中将其设置为 false,然后只测试该测试中的单个 Logo 点击。

关于javascript - 单击后打开的非 Angular 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28511013/

相关文章:

javascript - 在空格上拆分短语,首字母缩略词除外

javascript - npm 错误!尝试安装 express 时出现代码 EAI_AGAIN 错误

javascript - Div 元素滚动到另一个 div 元素上方而不是下方

testing - 我如何强制 Groovy 中的方法抛出异常

javascript - window.open 在 IE8 中不起作用

javascript - 如何确定 JSON 对象是否有子项

javascript - 从循环中删除重复项 - angularjs/javascript

javascript - Angularjs 缓存工厂 : id is already taken

php - Laravel 5.2.x 禁用特定的中间件

javascript - 是否可以使用 Testcafé 访问网站上定义的 af 函数?