标签: e2e-testing

量角器/ Selenium:在后台运行浏览器

我正在使用量角器进行测试.99%的时间没有必要真正看到浏览器,测试需要很长时间,而我们感兴趣的是最终结果.有没有办法隐藏为测试打开的浏览器(例如在后台运行)?

selenium-webdriver protractor e2e-testing

9
推荐指数
1
解决办法
6330
查看次数

如何在e2e测试中触发'swipeleft'事件(量角器)

例如,我有这个应用程序的HTML代码:

<div class="swipe-cover" ng-swipe-left="func()"></div>
Run Code Online (Sandbox Code Playgroud)

这样的测试:

it('test', function() {
   browser.executeScript( 'angular.element(".swipe-cover").triggerHandler("swipeleft")' );
});
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

如果我使用'click'insteaf'swipeleft',它就可以了.

如何为e2e测试触发'swipeleft'事件?

swipe angularjs protractor e2e-testing

9
推荐指数
1
解决办法
2415
查看次数

如何使用赛普拉斯测试文件输入?

如何编写需要与文件Input DOM元素交互的e2e流测试?

如果它是文本输入,我可以与它交互(检查值,设置值)等作为它的DOM组件.但是如果我有一个文件输入元素,我猜测交互是有限的,直到我可以打开对话框来选择文件.我无法前进并选择我要上传的文件,因为对话框是本机的而不是某些浏览器元素.

那么我如何测试用户是否可以从我的网站正确上传文件?我正在使用赛普拉斯编写我的e2e测试.

javascript testing integration-testing e2e-testing cypress

9
推荐指数
6
解决办法
1万
查看次数

在量角器中进行E2E测试中的服务

我想为我的应用程序编写功能测试,我想模拟我的loginService服务,以加快测试速度.我不想模拟$ http,而是内部调用它的服务,但是我不能把一个间谍放在函数loginService.validate上,它将HTTP查询发送到服务器,但它没有被加载,因为它在驱动程序中,而不是在测试本身.我也看了一下addMockModule但我无法理解如何使用它.有一种简单的方法可以做我想要的吗?我看了看这些,但他们没有帮助:

用量角器嘲弄和剔骨

在量角器中嘲弄角度服务

angularjs protractor e2e-testing

8
推荐指数
1
解决办法
7517
查看次数

如何检测angular2 Web应用程序处于测试模式

如何从angular2运行时检测到我在e2e测试模式下运行?我有一个会话刷新间隔,我不想在测试模式下设置,以避免与量角器同步问题.

一个明显的答案是寻找一个URL参数.有没有那么脏的解决方案?

EDIT(赏金前的澄清):量角器连接到角度(1或2),以便在评估任何东西之前等待所有未完成的工作完成.这意味着所有突出的角度promises或任何有效的角度timer都将悬挂量角器测试(最终导致它们失败).最常提出的解决方案是设置,browser.ignoreSynchronization = true但这将迫使我在回调链中嵌套所有e2e测试或使用一堆睡眠.可能两者都有.因此,我似乎陷入了摇滚和困难的地方之间,要么在编写e2e测试时遇到真正的艰难经历,要么在特定的应用程序代码行中设置条件,以便在"测试模式"(eww,丑陋)时不运行.我选择更简单的e2e测试,因为我希望将它们写成数百个,到目前为止我们只讨论一个在测试期间不重要的间隔(会话刷新的间隔为30分钟).

protractor e2e-testing angular

8
推荐指数
1
解决办法
885
查看次数

量角器无法在已部署的应用程序上检测到Angular 5

我正在尝试使用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 …

cucumber protractor e2e-testing angular angular-e2e

8
推荐指数
1
解决办法
965
查看次数

赛普拉斯管道console.log和命令日志输出

是否可以将赛普拉斯浏览器日志和命令日志重定向或捕获到输出?

我在这个主题上读了一些赛普拉斯的github 问题.但我不知道如何使它发挥作用.

基本上,我想在无头非GUI模式下捕获所有赛普拉斯GUI命令日志.如果我可以包含浏览器控制台日志会更好.目的是了解测试失败时发生的情况.

我使用teamcity作为ci.这是我的构建日志的示例.我想在这里看到所有命令日志.实际上,在服务器端运行的任何console.log cy.task都显示在构建日志中.跑步cy.task('log',message)太手动了.有更聪明的方法吗?

[09:49:08][Step 1/1] 2 of 4: new actions (52s)
[09:50:00][Step 1/1] 3 of 4: new actions (52s)
[09:50:53][Step 1/1] 4 of 4: new actions (53s)
[09:51:47][Step 1/1]   (Results)
[09:51:47][Step 1/1] 
[09:51:47][Step 1/1]   ???????????????????????????????????????
[09:51:47][Step 1/1]   ? Tests:        8                     ?
[09:51:47][Step 1/1]   ? Passing:      8                     ?
[09:51:47][Step 1/1]   ? Failing:      0                     ?
[09:51:47][Step 1/1]   ? Pending:      0                     ?
[09:51:47][Step 1/1]   ? Skipped:      0                     ?
[09:51:47][Step 1/1]   ? Screenshots:  0                     ?
[09:51:47][Step 1/1] …
Run Code Online (Sandbox Code Playgroud)

e2e-testing cypress

8
推荐指数
4
解决办法
4768
查看次数

量角器失败:元素不可交互

我正在为 Angular 7.x 应用程序运行 E2E 测试。测试在我的本地机器上直接运行。但是当我将它推送到 repo (GitLab) 时,管道失败并抛出以下错误:

用户配置文件 - 检查并更改配置文件 - 失败:元素不可交互(会话信息:chrome=71.0.3578.80)(驱动程序信息:chromedriver=2.45.615279(12b89733300bd268cff3b78fc76cb8f3a7cc44e5)-444e5-Linux4

测试用例:

it('USER PROFILE - Check and change PROFILE', () => {

    page.navigateTo();

    browser.sleep(1000);
    expect(page.getProfileEditTagName()).toMatch('app-edit-profile');

    expect(element(by.className('logged-as')).getText()).toBe( testEmail );


    browser.actions().mouseMove( element.all( by.id('editIcon-salutation') ).get(0)).click().perform().then(function () {
        browser.sleep(4000);

        element( by.className('mat-select-arrow') ).click().then(function () {

            browser.actions().mouseMove( element.all(by.className('option-value mat-option')).get(0)).click().perform();
            browser.sleep(1000);
            browser.actions().mouseMove( element.all( by.id('saveButton-salutation') ).get(0)).click().perform();
            browser.sleep(1000);

        });
    });

});
Run Code Online (Sandbox Code Playgroud)

navigateTo()只是profile.po.ts 中的一个方法:

navigateTo() {
    browser.get('/profileComponentUrl');
}
Run Code Online (Sandbox Code Playgroud)

令我困惑的是,我什至无法定位错误或错误的地方是它在本地运行良好。但是一旦我推送到 repo,它就会在那个测试用例中完全失败。请问有什么提示吗?

protractor e2e-testing

8
推荐指数
1
解决办法
2万
查看次数

单击 Cypress 后捕获 URL(window.location 更改)

我想知道如何在<a>链接上的点击事件后捕获和读取 URL 。

在 onClick 事件中,我们的 javascripthref对所点击链接的实际内容进行一些字符串操作,然后动态window.location.href = myNewReplacebleURL完成。原始href位置不一定是您在 onClick 之后到达的位置。

这是我开始的方式:

describe("Twitter", function() {

  it("Should assert that via value is set correctly in JS", function() {

    cy.server();
    cy.visit(Cypress.config("appUrl") + "/probes/sha/sha-via.html");
    cy.get("#v_test ul.share li a")
      .click();

  });

});
Run Code Online (Sandbox Code Playgroud)

编辑:我想要的是捕获位于“页面加载”步骤的 URL。

在此处输入图片说明

testing e2e-testing cypress

8
推荐指数
2
解决办法
8688
查看次数

访问新网址赛普拉斯

我是赛普拉斯的新手。我的应用程序作为“路由系统”手动更改window.location.hash。在某些时候,我单击一个更改哈希值的按钮,因此应该在测试期间更改页面。我可以看到执行过程中出现一个“new url”条目,但是如何让 cypress 访问该 url?

在此输入图像描述

简而言之,问题是什么:你可以看到我输入了密码,然后{enter}。运行测试我可以看到地址栏中的哈希值发生变化,但页面并没有根据哈希值变化而变化。

这是测试代码

context("Workflow", () => {

    it("login", () => {

        cy.visit("http://localhost:3000/src/#login")
        cy.get("#username").type("demo").should("have.value", "demouser")
        cy.get("#password").type("demo{enter}").should("have.value", "demo") // this should redirect to "/#home"
        //cy.wait(10000)
        cy.get(".subtitle").should("have.value", "Welcome") //this line fails as ".subtitle" is an element of "/#home"
    })
})
Run Code Online (Sandbox Code Playgroud)

编辑:经过大量失败的尝试,我想出了一个部分有效、笨重且hacky的解决方案。我认为我不需要使用它reload()来解决这个问题(必须有更好的解决方案..),但为了使其正常工作,我必须等待所有远程请求完成(否则reload()取消它们)。我说部分工作是因为你可以从代码中的注释中看到,如果我尝试#login先访问,然后按照重定向#home,然后将页面更改为#browser,最后一个不起作用(我可以看到哈希更改为#browser,但是页面仍然是#home)。

import 'cypress-wait-until';

let i = 0;

context("Workflow", () => {
    it("login", () => {
        cy.server( {
            onRequest: () …
Run Code Online (Sandbox Code Playgroud)

javascript e2e-testing cypress lit-element

8
推荐指数
2
解决办法
2万
查看次数