在控制台中执行e2e测试时,出现以下错误,好像chromedriver没有更新。在讨论有关chrome版本落后的类似问题时,在我看来,chrome稳定版本正在按预期方式下载(76.0.3809.100)。但是被量角器的webmanager驱动程序拉出的chromedriver版本停留在2.46中。
我尝试将chromedriver从2.46手动更新为76.0.3809.12,但在执行过程中仍回落至2.46。
#!/bin/bash
set -e -u -x
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
apt-get update && apt-get install -y google-chrome-stable
cd git-platformUI/ui
npm install
npm set progress=false && npm config set depth 0 && npm cache clean --force
$(npm bin)/ng e2e --configuration=$CONFIG
Run Code Online (Sandbox Code Playgroud)
[07:33:13] E /启动器-未创建会话:Chrome版本必须介于71和75之间(驱动程序信息:chromedriver = 2.46.628388(4a34a70827ac54148e092aafb70504c4ea7ae926),平台= Linux 4.15.0-36-通用x86_64)[07 :33:13] E / launcher-SessionNotCreatedError:未创建会话:Chrome版本必须介于71和75之间(驱动程序信息:chromedriver = 2.46.628388(4a34a70827ac54148e092aafb70504c4ea7ae926),platform = Linux 4.15.0-36-generic x86_64)在parseHttpResponse(/ tmp / build / 357f536d / git-platformUI / …
我一直在将我的应用程序从4迁移到6,我无法为我的e2e测试执行我的代理脚本.脚本列表如下所示:
"scripts": {
"ng": "ng",
"start": "ng serve",
"start:tst1": "ng serve --proxy-config config/proxy/proxy.tst1.json",
"start:tst5": "ng serve --proxy-config config/proxy/proxy.tst5.json",
...
"test:watch": "ng test",
"lint": "ng lint --type-check true",
"e2e": "ng e2e",
"e2e:tst1": "ng e2e --proxy-config config/proxy/proxy.tst1.json",
"e2e:tst5": "ng e2e --proxy-config config/proxy/proxy.tst5.json",
},
Run Code Online (Sandbox Code Playgroud)
我不明白的是,启动命令(ng serve)工作得非常好npm run start:tst5.但是,当我尝试执行e2e测试时,npm run e2e:tst5它会抛出错误:Unknown option: '--proxyConfig'.
我的angular.json中的配置如下所示:
...
"lmsbo-bo-e2e": {
"root": "e2e",
"sourceRoot": "e2e",
"projectType": "application",
"architect": {
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": { …Run Code Online (Sandbox Code Playgroud) Cypress和许多其他关于测试 Web 应用程序的帖子建议依赖数据属性,如data-cy或data-test-id用于定位元素,而不是依赖于id属性。
我的理解是有两个原因:
IDs同一页面上有多个组件- 但这也应该适用于“data-cy”或“data-test-id” ' 属性。IDs与 相关联时CSS,倾向于更频繁地更改它们,而data-*属性可能不太容易更改。有人可以对建议多加说明吗?
我正在考虑的另一件事是要求我的开发人员将data-test*属性放在div会使用组件的标签上 - 这样测试属性实际上比组件id属性高一个级别,即使在多个实例相同的情况下也可能派上用场组件被使用。但同样,我不知道为什么id该属性div相比,当标签是坏的data-test*属性。
我正在尝试使用Protractor和Cucumber为我的Web应用程序创建一个包含E2E测试的存储库.我从这个存储库开始:https://github.com/spektrakel-blog/angular-protractor-cucumber
当我强迫Protractor将应用程序视为常规网页时,测试运行正常.测试运行器正在与应用程序交互并期待一些结果.问题是,我想让Protractor检测Angular,以便在检查'Then'断言之前等待区域稳定.
这是我的protractor.conf.js:
exports.config = {
allScriptsTimeout: 30000,
capabilities: {
browserName: 'chrome',
chromeOptions: {
args: ['--no-sandbox']
}
},
directConnect: true,
baseUrl: 'http://<ci-server-address>/',
specs: [
'./e2e/features/*.feature'
],
framework: 'custom',
frameworkPath: require.resolve('protractor-cucumber-framework'),
cucumberOpts: {
require: ['./e2e/steps/**/*.ts'],
strict: true,
format: [
'json:reports/summary.json'
],
dryRun: false,
compiler: []
},
onPrepare() {
browser.ignoreSynchronization = true;
require('ts-node').register({
project: 'e2e/tsconfig.e2e.json'
});
}
};
Run Code Online (Sandbox Code Playgroud)
简而言之 - 测试使用以下配置运行,但是当我删除时browser.ignoreSynchronization = true;,我收到以下错误:Timed out waiting for asynchronous Angular tasks to finish after 30 seconds. This may …
当创建一个新的 nx 工作区(即使用 create-nx-workspace)然后生成一个应用程序(使用 ng g app)时,它会在 apps 文件夹中创建一个 app 文件夹(到目前为止还不错)和另一个 app-e2e 文件夹,也在应用程序文件夹内。在我看来,在 src 文件夹旁边的 app 文件夹中创建一个 e2e 文件夹会更有意义,因为 e2e 测试应该属于该特定应用程序,而且它不会以这种方式使应用程序文件夹混乱。
那么这个约定背后的原因是什么?
非常感谢!
当前,每次更改规范文件时,以及每次此命令重建整个项目时,我都会运行ng e2e!有没有一种方法可以运行测试而无需重建整个项目,就像ng test一样。
我想测试我的应用是否滚动到线程页面内的特定帖子.
最初我认为isDisplayed可能有所帮助,并编码如下:
element(by.id(postId)).isDisplayed().then((isDisplayed) => {
expect(isDisplayed).toBe(true);
});
Run Code Online (Sandbox Code Playgroud)
仔细阅读文档后,isDisplayed不会检查元素是否在视口内.
一种hacky方式是计算各种元素的位置,从可滚动的父级开始(window在我的情况下不是这样).
检查这个是最好的做法吗?
我们最近开始使用 Cypress 进行带有 Angular 6 UI 的 E2E 测试。事实证明它很棒,而且在我们看来,它比 Protractor 好用得多。
我们的计划是模拟与服务器的所有交互。对于使用 cy.route() 和夹具的所有 REST/XHR 调用来说,这很容易。
但是,我们也使用网络套接字。事实证明,嘲笑与它的交互并不那么容易。
从我迄今为止所做的研究来看,我能找到的唯一建议是使用 cy.stub()。这在原则上听起来不错,但我找不到对此的任何详细说明,最好是一些使用它来模拟 Web 套接字的示例。
我认为可能有效的另一种方法是使用 Angular 的 TestBed 服务。注入我们自己的服务来处理我们与 Web 套接字的交互。
但是,其中任何一条都是正确的路线吗?任何人都可以提供任何应该做的最佳方式的例子吗?
任何让我朝着正确方向前进以帮助我入门的指示将不胜感激。谢谢。
我想使用protractor.jsv5.x在我的 Angular项目中实现 e2e 。但是当我运行命令时
ng e2e -s false
我在下面收到此错误,谁能告诉我如何解决此问题?
\n\n[15:58:11] E/launcher - Error: TSError: \xe2\xa8\xaf Unable to compile TypeScript\nThe \'files\' list in config file \'tsconfig.json\' is empty. (18002)\n at load (F:\\Commutatus\\yop-v3\\node_modules\\ts-node\\src\\index.ts:159:13)\n at service (F:\\Commutatus\\yop-v3\\node_modules\\ts-node\\src\\index.ts:285:32)\n at shouldIgnore (F:\\Commutatus\\yop-v3\\node_modules\\ts-node\\src\\index.ts:293:21)\n at Object.require.extensions.(anonymous function) [as .ts] (F:\\Commutatus\\yop-v3\\node_modules\\ts-node\\src\\index.ts:302:11)\n at Module.load (internal/modules/cjs/loader.js:599:32)\n at tryModuleLoad (internal/modules/cjs/loader.js:538:12)\n at Function.Module._load (internal/modules/cjs/loader.js:530:3)\n at Module.require (internal/modules/cjs/loader.js:637:17)\n at require (internal/modules/cjs/helpers.js:22:18)\n at F:\\Commutatus\\yop-v3\\node_modules\\protractor\\node_modules\\jasmine\\lib\\jasmine.js:84:5\n[15:58:11] E/launcher - Process exited with error code 100\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的tsconfig.json(位于e2e文件夹内)-
当我ng e2e在我的angular 7项目根目录中运行时,它不会启动开发服务器,而只是在大约9-10秒后退出。
我试图创建一个新项目并比较package.json和angular.json。所有的角度依赖关系都是相同的版本,angular.json的服务,构建和e2e命令也相同。
在ng e2e新创建的项目中运行命令后,控制台中的输出与运行相同ng serve,然后运行所有测试。在我的项目中,此命令没有输出。
谢谢您的帮助
编辑 我正在使用Angluar 7.2.3和CLI 7.3.0
angular-e2e ×10
angular ×7
protractor ×6
e2e-testing ×4
angular6 ×2
cypress ×2
angular-cli ×1
concourse ×1
cucumber ×1
nrwl ×1
testing ×1
websocket ×1