【问题标题】:Protractor "Error while waiting for Protractor to sync with the page" browsing Angular site量角器“等待量角器与页面同步时出错”浏览 Angular 站点
【发布时间】:2019-08-16 23:16:49
【问题描述】:

我正在尝试按照 Protractors official site 上的量角器教程进行操作,但我什至无法完成第 0 步。

我在 6.0.0 版本中使用量角器和 webdriver-manager。我的 SO 是 Linux (Ubuntu 18.06),我的 Chrome 是最新的 (73.0.3683.86)。 安装量角器后,我不得不降级默认安装的 chromedriver,因为它希望我拥有 Chrome 74。我通过执行webdriver-manager --versions.chrome 73.0.3683.68 降级了它。

之后,我一直按照教程的第 0 步进行操作。我有 configuration.js 文件和 test-spec.js 文件如下:

configuration.js

 exports.config = {
      seleniumAddress: 'http://localhost:4444/wd/hub',
      specs: ['test-spec.js']
    };

test-spec.js

describe('Protractor Demo App', function() {
    it('should have a title', function() {
        browser.get('http://juliemr.github.io/protractor-demo/');
        expect(browser.getTitle()).toEqual('Super Calculator');
    });
});

当我运行 protactor protractor configuration.js 时,出现以下错误:

[15:15:13] I/hosted - 在 http://localhost:4444/wd/hub 使用 selenium 服务器
弃用:不建议直接设置 randomizeTests,请使用 `configure` 中的 random 选项
弃用:不建议直接在 Env 上设置 specFilter,请使用 `configure` 中的 specFilter 选项
开始
F

失败:
1) Protractor Demo App 应该有一个标题
  信息:
    预期 [object Promise] 等于“超级计算器”。
  堆:
    错误:预期 [object Promise] 等于“超级计算器”。
        在
        在用户上下文。 (/home/srubio/Escritorio/Protractor/test-spec.js:5:32)
        在

1 个规范,1 个失败
在 0.009 秒内完成
/home/srubio/n/lib/node_modules/protractor/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:3190
        抛出参数[0];
        ^

错误:等待 Protractor 与页面同步时出错:“angularJS 可测试性和 Angular 可测试性都未定义。这可能是因为这是一个非 Angular 页面,也可能是因为您的测试涉及客户端导航,这可能会干扰 Protractor 的引导。有关详细信息,请参阅 http://git.io/v4gXM"
    在量角器浏览器。 (/home/srubio/n/lib/node_modules/protractor/built/browser.js:354:27)
    在 Generator.next ()
    完成时(/home/srubio/n/lib/node_modules/protractor/built/browser.js:4:58)
    在 processTicksAndRejections (internal/process/next_tick.js:81:5)

【问题讨论】:

    标签: javascript angular selenium protractor


    【解决方案1】:

    更新此答案

    Protractor version 6.0 使用selenium version 4,这是第一个放弃对控制流的支持的 selenium 版本。控制流是允许 Protractor 执行代码的原因

    browser.get('http://google.com');
    expect(browser.getTitle()).toEqual('Super Calculator');
    

    以同步方式。

    到现在为止,控制流一直用于以用户友好的方式处理 webdriverJS 承诺的异步性质。一旦es8 async/await 风格的承诺处理得到支持,但决定弃用控制流并建议用户继续利用 async/await。


    原始答案

    6.0 是 Protractor 的 latest version,我相信它是在 3 天前(大约 19 年 3 月 22 日左右)发布的,它放弃了对以前默认启用的控制流的支持。显然,教程文档尚未更新以反映这一点,我相信这就是您看到此问题的原因。

    接下来,您将需要使用 async/await 语法(在我看来,这实际上更具可读性和易用性)

    试试下面的代码:

    configuration.js

    exports.config = {
      seleniumAddress: 'http://localhost:4444/wd/hub',
      specs: ['test-spec.js']
    };
    

    test-spec.js

    describe('Protractor Demo App', function() {
        it('should have a title', async function() {
            await browser.get('http://juliemr.github.io/protractor-demo/');
            expect(await browser.getTitle()).toEqual('Super Calculator');
        });
    });
    

    更新: 如果您尝试将SELENIUM_PROMISE_MANAGER: true, 添加到您的configuration.js 中,这可能允许您继续编写所编写的演示。

    【讨论】:

    • 非常感谢!我花了几乎一整天的时间。我没有意识到最新版本是如此新鲜,正如你所说,文档并没有反映这一点。这也解释了为什么我找不到遇到同样问题的人!我发现的只是那些实际上正在访问非 Angular 应用程序的人。
    • 很高兴为您提供帮助!实际上,我昨天只是偶然注意到了新版本的更改日志,所以我相信在接下来的几天/几周内会有很多人遇到你的情况。
    猜你喜欢
    • 2014-05-16
    • 2018-12-07
    • 2019-10-03
    • 2016-04-26
    • 2015-10-05
    • 2023-03-12
    • 1970-01-01
    • 2015-05-06
    • 2019-06-12
    相关资源
    最近更新 更多