【问题标题】:Certain protractor API functions cause errors某些量角器 API 函数会导致错误
【发布时间】:2018-02-01 08:44:14
【问题描述】:

为什么我在使用 Protractor API 函数时会收到错误消息?我已经在互联网上搜索了这个问题的解决方案,我找到了几个类似的答案,但它们没有用,所以我问社区。​​p>

我正在尝试使用 Karma 和 Protractor 设置最简单的 e2e 测试。 像这样的空测试代码块不会产生错误:

describe('Mapping Assistant State', () => {
   beforeEach(() => {
   });

   it('should display a table',() => {
      console.log('test');
   });

   it('should click the create Paste button',() => {

    });
});

一旦我从量角器添加某些函数,如 expect() 或 browser(),就会出现问题:

it('should display a table',() => {
    browser.get('someUrl');
    expect(element(by.css('.map')).getText()).toContain('map');

});

这是我的 package.json 的一些内容:

"protractor": "^5.3.0",
"karma": "^1.7.1",
"@angular/cli": "^1.6.6",
"typescript": "^2.5.2"
"@angular/core": "^4.3.6",
"rxjs": "^5.4.3",
"@types/selenium-webdriver": "^3.0.6",
"ts-node": "^4.0.1",
"@types/node": "^8.0.58",

还有:

import { browser, by, element } from 'protractor';
import {describe} from 'selenium-webdriver/testing';
import {beforeEach} from 'selenium-webdriver/testing';

这是我的protractor.conf.js 文件:

const { SpecReporter } = require('jasmine-spec-reporter');

exports.config = {
    allScriptsTimeout: 11000,
    specs: [
        './e2e/**/*.e2e-spec.ts'
    ],
    capabilities: {
        'browserName': 'chrome'
    },
    directConnect: true,
    baseUrl: 'http://localhost:4200/',
    framework: 'jasmine',
    jasmineNodeOpts: {
        showColors: true,
        defaultTimeoutInterval: 30000,
        print: function() {}
    },
    onPrepare() {
        require('ts-node').register({
            project: 'e2e/tsconfig.e2e.json'
        });
        jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
    }
};

添加任何量角器功能并运行“ng test”后,会出现以下错误:

    ERROR in ./node_modules/saucelabs/index.js
Module not found: Error: Can't resolve './lib-cov/SauceLabs' in '/Users/moop/Work/frontend/web/node_modules/saucelabs'
 @ ./node_modules/saucelabs/index.js 2:2-32
 @ ./node_modules/protractor/built/driverProviders/sauce.js
 @ ./node_modules/protractor/built/driverProviders/index.js
 @ ./node_modules/protractor/built/runner.js
 @ ./node_modules/protractor/built/index.js
 @ ./e2e/sample.e2e-spec.ts
 @ ./src/test.ts

ERROR in ./node_modules/protractor/built/runner.js
Module not found: Error: Can't resolve 'child_process' in '/Users/moop/Work/frontend/web/node_modules/protractor/built'
 @ ./node_modules/protractor/built/runner.js 54:32-56
 @ ./node_modules/protractor/built/index.js
 @ ./e2e/sample.e2e-spec.ts
 @ ./src/test.ts

ERROR in ./node_modules/protractor/built/bpRunner.js
Module not found: Error: Can't resolve 'child_process' in '/Users/moop/Work/frontend/web/node_modules/protractor/built'
 @ ./node_modules/protractor/built/bpRunner.js 3:24-48
 @ ./node_modules/protractor/built/driverProviders/driverProvider.js
 @ ./node_modules/protractor/built/driverProviders/index.js
 @ ./node_modules/protractor/built/runner.js
 @ ./node_modules/protractor/built/index.js
 @ ./e2e/sample.e2e-spec.ts
 @ ./src/test.ts

ERROR in ./node_modules/protractor/built/debugger.js
Module not found: Error: Can't resolve 'child_process' in '/Users/moop/Work/frontend/web/node_modules/protractor/built'
 @ ./node_modules/protractor/built/debugger.js 67:32-56
 @ ./node_modules/protractor/built/browser.js
 @ ./node_modules/protractor/built/index.js
 @ ./e2e/sample.e2e-spec.ts
 @ ./src/test.ts

ERROR in ./node_modules/selenium-webdriver/firefox/binary.js
Module not found: Error: Can't resolve 'child_process' in '/Users/moop/Work/frontend/web/node_modules/selenium-webdriver/firefox'
 @ ./node_modules/selenium-webdriver/firefox/binary.js 25:14-38
 @ ./node_modules/selenium-webdriver/firefox/index.js
 @ ./node_modules/protractor/built/index.js
 @ ./e2e/sample.e2e-spec.ts
 @ ./src/test.ts

ERROR in ./node_modules/selenium-webdriver/io/exec.js
Module not found: Error: Can't resolve 'child_process' in '/Users/moop/Work/frontend/web/node_modules/selenium-webdriver/io'
 @ ./node_modules/selenium-webdriver/io/exec.js 20:21-45
 @ ./node_modules/selenium-webdriver/remote/index.js
 @ ./node_modules/protractor/built/index.js
 @ ./e2e/sample.e2e-spec.ts
 @ ./src/test.t

有没有人知道是什么原因造成的以及如何解决它?

【问题讨论】:

  • 尝试删除这些导入: import {describe} from 'selenium-webdriver/testing';从“selenium-webdriver/testing”导入 {beforeEach};
  • 请分享 protractor.conf.js
  • @varunsingh 我刚刚将 protractor.conf.js 添加到问题中。 Talavera,在我添加 selenium-webdriver 的导入之前,这些错误仍然存​​在。
  • @IanS 你有没有找到解决方案?我看到了同样的事情,下面的唯一答案并没有为我解决。
  • 在我的情况下,我从量角器导入了事件发射器。 VSCode 自动导入解决了这个问题。 import { EventEmitter } from "protractor";

标签: angular protractor karma-runner karma-jasmine e2e-testing


【解决方案1】:

有时我们添加了事件发射器,然后 Visual Studio 自动添加了事件发射器库。

like : import { EventEmitter } from 'protractor'; 然后自动生成保护器错误。

解决方案:从自己的代码中删除自动导入并添加import { EventEmitter } from '@angular/core'

所以错误是错误地在我们的代码中为 EventEmitter 添加了库。

【讨论】:

  • 这解决了我的问题。我傻到相信自动导入。
  • 谢谢老兄。头痛保护程序。
  • 当 VSCode 自动从库中导入 EventEmitter emit(); 函数开始要求参数时,我不知何故知道 Protractor 本身有问题。你的回答解决了。谢谢。
  • 这是大多数情况下的原因,它也解决了我的问题
  • 谢谢你,我以为我弄坏了 YHO!谢谢
【解决方案2】:

仔细检查你的日志,如果它在说

日志 -
./node_modules/saucelabs/index.js 中的错误 未找到模块:错误:无法解析 'N:\Angular Codes\billmanagement\node_modules\ saucelabs' 中的 './lib-cov/SauceLabs'
./node_modules/protractor/built/runner.js 中的错误 未找到模块:错误:无法解析 'N:\Angular Codes\billmanagement\node_modules\ protractor\built'中的 'child_process'


解决方案 -
确保在 app.module.ts 中导入了正确版本的事件发射器
从“@angular/core”导入 { EventEmitter };

不是这个-(通常 Visual Studio 会自动执行) 从“量角器”导入 { EventEmitter };

【讨论】:

    【解决方案3】:

    再安装两个包:@types/nodets-node

    【讨论】:

    • 这已经为我解决了,但其他人仍然有这个错误
    【解决方案4】:

    如果您使用的是编辑器(例如 VSCode),则多次自动导入会产生此问题。除了上述答案,即表明:

    import { EventEmitter } from 'protractor';
    

    而不是这个...

    import { EventEmitter } from '@angular/core';
    

    会给你说的错误。但即便如此:

    import { error } from 'protractor';
    

    而不是这个...

    import { error} from '@angular/core';
    

    也会给你同样的结果。就我而言,我不需要导入!我试图在 catch 语句中使用临时变量名称“error”,并且在输入该名称时,它会自动从量角器创建一个导入。 (我现在决定使用更具体的名称,比如“myfuncerr”)。因此,自动完成的任何内容都可能从错误的库中导入。

    如果您收到此错误,首先要做的是对“量角器”一词进行全局查找。这是一个快速修复(它至少可以为我节省几个小时)。

    【讨论】:

      【解决方案5】:

      在我的情况下,从保护器中意外导入 $ 而不是 jquery

      【讨论】:

        猜你喜欢
        • 2010-10-14
        • 2017-10-12
        • 2015-02-23
        • 2015-09-22
        • 1970-01-01
        • 2018-01-17
        • 2011-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多