use*_*955 8 protractor angular
我随机收到错误:
失败:等待 Protractor 与页面同步时出错:“angularJS 可测试性和 Angular 可测试性都未定义。这可能是因为这是一个非角度页面,或者因为您的测试涉及客户端导航,这可能会干扰 Protractor 的引导。有关详细信息,请参阅https://github.com/angular/protractor/issues/2643 ”
跑步
$ ng e2e --webdriverUpdate=false --devServerTarget=
Run Code Online (Sandbox Code Playgroud)
在我的 spec.ts 文件中,我有以下 2 个测试,第一个总是有效,第二个随机失败并出现上述错误。
beforeEach(async () => {
myPage = new MyPage();
browser.get('my-page');
});
it('should work', async () => {
console.log('should work');
expect(true).toBeTruthy();
});
it('should display the title', async () => {
const title = await $('my-title-selector').getText();
expect(title).toEqual('My-Title');
});
Run Code Online (Sandbox Code Playgroud)
这是 MyPage 页面对象:
import { $, $$ } from 'protractor';
export class MyPage {
title = $('my-title-selector');
}
Run Code Online (Sandbox Code Playgroud)
这是我的 protractor.conf.js
// Protractor configuration file, see link for more information
// https://github.com/angular/protractor/blob/master/lib/config.ts
const { SpecReporter } = require('jasmine-spec-reporter');
exports.config = {
allScriptsTimeout: 11000,
specs: [
'./src/**/*.e2e-spec.ts'
],
capabilities: {
'browserName': 'chrome'
},
SELENIUM_PROMISE_MANAGER: false,
directConnect: true,
baseUrl: 'http://localhost:4200/',
framework: 'jasmine',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function () { }
},
onPrepare() {
require('ts-node').register({
project: require('path').join(__dirname, './tsconfig.e2e.json')
});
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
},
};
Run Code Online (Sandbox Code Playgroud)
你有什么想法吗?
如果您正在使用 async/await(您就是这样!),您将需要等待所有承诺。所以我的猜测是您beforeEach加载页面的承诺尚未完成,并且您正在寻找可能未由 Protractor 正确引导的 Web 元素。
beforeEach(async () => {
myPage = new MyPage();
await browser.get('my-page'); // browser.get returns a webdriver.promise.Promise
});
it('should work', async () => {
console.log('should work');
expect(true).toBeTruthy();
});
it('should display the title', async () => {
const title = await $('my-title-selector').getText(); // <-- this is right, getText returns a webdriver.promise.Promise<string>
expect(title).toEqual('My-Title');
});
Run Code Online (Sandbox Code Playgroud)
如果您使用 Protractor 5.4,它仍然使用 selenium-webdriver 控制流/promise 库,而不是本机 Promise。所以 webdriver.promise.Promise 来自 selenium-webdriver 类型、promise 命名空间、Promise 对象。在 Protractor 6 中(当它结束测试版时),这将切换到原生 Promises。
希望有帮助。
| 归档时间: |
|
| 查看次数: |
4689 次 |
| 最近记录: |