angular - Angular 7,量角器,随机错误“angularJS 可测试性和角度可测试性都未定义”
问题描述
我随机收到错误:
失败:等待 Protractor 与页面同步时出错:“angularJS 可测试性和 Angular 可测试性都未定义。这可能是因为这是一个非 Angular 页面,也可能是因为您的测试涉及客户端导航,这可能会干扰 Protractor 的引导。有关详细信息,请参阅https://github.com/angular/protractor/issues/2643
跑步
$ ng e2e --webdriverUpdate=false --devServerTarget=
在我的 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');
});
这是 MyPage 页面对象:
import { $, $$ } from 'protractor';
export class MyPage {
title = $('my-title-selector');
}
这是我的 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 } }));
},
};
你有什么想法吗?
解决方案
如果您正在使用 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');
});
如果您使用 Protractor 5.4,它仍然使用 selenium-webdriver 控制流/promise 库而不是本机 Promises。所以 webdriver.promise.Promise 来自 selenium-webdriver 类型,promise 命名空间,Promise 对象。在 Protractor 6 中(当它超出测试版时),这将切换到原生 Promise。
希望有帮助。
推荐阅读
- reporting-services - SQL Server Reporting Services 2017 - 更改导出文件名
- floating-point - 验证浮点表示
- c# - Linq 按特定字段分组,然后转换为字典
- php - PHP - 自 2019 年 11 月 12 日以来,Paypal IPN 返回 HTTP 403 错误
- angular - 为什么我需要 *public-api.ts* 和 *exports*
- javascript - 在 KendoUI Jquery 中过滤具有空对象的列
- mysql - 为什么 MySQL 在尝试插入 datetime '2019-08-13 19:00:00' 时会出错?
- javascript - Contenteditable div
在 IE 上为空时返回 - sql - SQL Server 将多列乘以第二个表中的列中的值
- angular - 模型关闭后的Angular 8组件交互