标签: end-to-end

我应该使用浏览器还是ptor = protractor.getInstance()?

我观看了2013年8月上传的视频(https://www.youtube.com/watch?v=idb6hOxlyb8).它声称我们应该使用

ptor.get(url)

而不是

browser().navigateTo(url)

在未来.但是,当我在量角器主页(在git hub上)查看文档时,他们的最新示例仍在使用浏览器.

我想知道是否有人知道要使用的动作

var ptor = protractor.getInstance()

还在发生吗?

非常感谢你提前!

automated-tests end-to-end angularjs protractor

19
推荐指数
1
解决办法
9234
查看次数

Maven下多个Spring启动应用程序的端到端集成测试

SpringMaven构建的验证阶段,为多个引导应用程序运行端到端集成测试的推荐方法是什么?

基本上,我有一个多模块Maven项目,其中几个模块是独立的弹簧启动应用程序.这些单独的应用程序有自己的数据源配置,带JMS队列的集成流等.例如,应用程序A将轮询数据库中的事件,当发生这种情况时,它会生成JSON数据文件并将消息放入JMS队列.应用程序B正在轮询JMS队列,因此选择消息,读取文件,使用另一个数据库执行某些处理,并将消息放在不同的队列中.然后,应用程序C将接收该消息等.

我已经为各个应用程序设置了集成测试; 这些在Maven故障安全插件下运行.但是,我想整合测试整个系统,端到端,在Maven下.我在专用于此任务的项目中设置了一个单独的模块,因此希望此模块的验证构建阶段使用其他相关模块进行端到端测试.

这样做有最佳实践方法吗?我看到3种可能的方式:

  1. 将每个应用程序的配置加载到同一应用程序上下文中.但是,由于存在多个数据源等,这会产生冲突,因此这些数据源都必须手动配置才能实现端到端集成测试 - 所以这对我来说似乎不对.
  2. 将每个应用程序作为一个单独的进程启动 - 然后如何正确地跟踪它们并确保它们在测试模块构建停止/崩溃/等时关闭?
  3. 有没有办法在同一个进程中轻松加载单独的Spring引导应用程序,每个应用程序都有自己的配置上下文?这似乎是最明智的选择.有关Mavenbuild/failsafe插件的任何注意事项吗?

integration-testing end-to-end maven multi-module spring-boot

19
推荐指数
2
解决办法
2581
查看次数

在Protractor中自动检测测试耦合(随机化测试执行顺序)

问题:

我们有一个相当大的测试代码库.我们不时地执行所有测试,而不是执行所有测试.但是,有时,我们会看到意外的测试失败,因为测试是相互连接的.例如,一个测试假设先前测试创建了一些数据 - 单独运行此类测试将失败.

问题:

是否可以自动检测项目中哪些Protractor测试结合?

我们当前的想法是以某种方式随机化测试执行顺序或从所有可用测试中随机选取一组测试并检查是否没有失败.因此,另一个问题是:是否可以更改/随机化Protractor测试发现并更改测试执行的顺序?


灵感来自Ned Batchelder的"Finding test coupling"博文和Python nose测试跑步者的nose-randomly插件:

测试中的随机性非常强大,可以发现测试本身的隐藏缺陷,并为您的系统提供更多的覆盖.

通过随机排序测试,降低了令人惊讶的测试间依赖性的风险 - 这是一种在许多地方使用的技术,例如Google的C++测试运行者googletest.

javascript testing selenium end-to-end protractor

19
推荐指数
2
解决办法
382
查看次数

Cypress - 4000 毫秒后重试超时:预计找到元素 - 仅在 Jenkins 中

我有一组 Cypress 测试失败,仅在我的 Jenkins 环境中失败。整个describe块无法找到元素。块中的每个测试都以相同的命令开始:

describe("This section of tests", () => {
  it("Test for something in this section", () => {
    cy.login(); // custom login command, works in all other test blocks
    setupPage(); // page setup function, no problems in all other test blocks
    cy.wait(10000); // desperation wait

    cy.get("#toggle-detail-pane-button").click(); // issue here!
    // all tests in block run more assertions and commands after this
  });

  // more similar tests in block
});

// more describe blocks …
Run Code Online (Sandbox Code Playgroud)

javascript end-to-end jenkins cypress

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

获取当前选定的文本

我尝试使用输入中的当前选定文本,window.getSelection()但我总是得到一个空字符串:

expect(browser.executeScript("return window.getSelection().toString();")).toEqual("test");
Run Code Online (Sandbox Code Playgroud)

结果成:

Expected '' to equal 'test'.
Run Code Online (Sandbox Code Playgroud)

使用angularjs.org作为目标站点的完整可重复测试:

describe("My test", function () {
    beforeEach(function () {
        browser.get("https://angularjs.org/");
    });

    it("should select text in an input", function () {
        var query = element(by.css("input.search-query"));
        query.sendKeys("test");
        query.sendKeys(protractor.Key.chord(protractor.Key.COMMAND, "a"));

        expect(browser.executeScript("return window.getSelection().toString();")).toEqual("test");
    });
});
Run Code Online (Sandbox Code Playgroud)

请注意,我实际上看到输入的文本是使用COMMAND +"a"选择的.

我究竟做错了什么?

使用量角器2.5.1,firefox 41.

javascript selenium end-to-end selenium-webdriver protractor

18
推荐指数
1
解决办法
1313
查看次数

Cypress.io - 根据cy.route()中的请求参数以编程方式设置响应

我在端到端测试中存根api请求,并希望能够根据发出的请求参数返回不同的响应.

目前,无论发布什么内容,我的存根都会返回静态响应,如下所示:

cy.server()
cy.route({
    method: 'POST',
    url: '**/redeem-code',
    status: 200,
    response: {
        status: "Success"
    },
    delay: 500
})
Run Code Online (Sandbox Code Playgroud)

我希望能够检查发布的请求参数,然后有条件地决定返回哪个响应.我正在尝试做这样的事情:

cy.server()
cy.route({
    method: 'POST',
    url: '**/redeem-code',
    status: 200,
    response: (req) => {
        if(req.code == '1234') return { status: "Success" }
        else return { status: "Failure" }
    },
    delay: 500
})
Run Code Online (Sandbox Code Playgroud)

显然,上面的代码不起作用; 这只是我想要做的一个例子.

我知道赛普拉斯允许使用响应方法,但是我找不到我想在他们的文档中做任何事情的语法.如何在响应方法中获取请求参数,以便我可以决定返回哪个响应?

javascript integration-testing end-to-end cypress

17
推荐指数
2
解决办法
1864
查看次数

使用Protractor测试确认对话框

这似乎是一个非常简单的问题,但我真的无法在网上找到答案,我自己无法找到答案.

我正在使用AngularJS作为我的应用程序,在某些时候,我有一个原生的JavaScript确认框/对话框,询问用户他/她是否想要接受或取消更改.

如何在我的测试中模拟选定的选项(使用量角器)?是否可以访问确认框并"单击"确定或取消并在我的测试中采取相应措施?我猜是这样的

ptor.switchTo().<something>
Run Code Online (Sandbox Code Playgroud)

是可能的,但我似乎无法找到答案.

javascript testing end-to-end angularjs protractor

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

如何在具有多个类的量角器中选择一个元素?

我有这样的div:

<div class="class1 class2 class3" ng-click="displayItems(category.categoryId, category.categoryDescription, category.associatedToElements, 'isItemChecked')"> </div>
Run Code Online (Sandbox Code Playgroud)

当我试图通过css获取Protractor中的元素时:

var elementList =  element.all(by.css('class2'));
Run Code Online (Sandbox Code Playgroud)

我没有定义.

当我尝试使用ng-click时:

var elementList = element.all(by.css('[ng-click="displayItems(category.categoryId, category.categoryDescription, category.associatedToElements, "isItemChecked")"]'))
Run Code Online (Sandbox Code Playgroud)

我仍然无法追踪任何元素.

建议是最受欢迎的.

这是我的代码:

var categoryList, firstCategory;
beforeEach(function(){
    categoryList = element.all(by.css('.class2'));
    firstCategory = categoryList.last();
});

it('Should display values correctly', function(){
    firstCategory.click();
});
Run Code Online (Sandbox Code Playgroud)

testing end-to-end jasmine angularjs protractor

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

点击后打开非角度页面

我正在尝试实现以下测试场景:

  • 点击页面上的徽标
  • 断言打开了一个新的浏览器窗口(Chrome中的选项卡)并检查当前的URL

问题是在新浏览器窗口中打开的页面是非角度页面,而我正在执行点击的主页面角度页面.

这是我的第一次尝试:

it("should show logo", function () {
    var logo = scope.page.logo;
    expect(logo.isDisplayed()).toEqual(true);

    // opens a new page on click
    logo.click().then(function () {
        browser.getAllWindowHandles().then(function (handles) {
            browser.switchTo().window(handles[1]).then(function () {
                expect(browser.getCurrentUrl()).toEqual('http://myurl.com/');
            });

            // switch back to the main window
            browser.switchTo().window(handles[0]);
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

失败的是:

错误:等待量角器与页面同步时出错:"在窗口中找不到角"

这是可以理解的.

我的第二次尝试是使用ignoreSynchronization布尔标志:

browser.ignoreSynchronization = true;
logo.click().then(function () {
    browser.getAllWindowHandles().then(function (handles) {
        browser.switchTo().window(handles[1]).then(function () {
            expect(browser.getCurrentUrl()).toEqual('http://myurl.com/');
        });

        // switch back to the main window
        browser.switchTo().window(handles[0]);
    }); …
Run Code Online (Sandbox Code Playgroud)

javascript testing end-to-end angularjs protractor

14
推荐指数
1
解决办法
7215
查看次数

期望()没有实际期望

问题:

最近,在查看我们现有的测试代码库时,我注意到在expect()没有"匹配"部分时使用了一种危险的拼写错误/错误:

expect(page.filters.fromDateLabel.getText(), "After");
Run Code Online (Sandbox Code Playgroud)

我很确定toEqual()这里有用的意思:

expect(page.filters.fromDateLabel.getText()).toEqual("After");
Run Code Online (Sandbox Code Playgroud)

这个问题是jasmine在这种情况下不会失败的预期(很明显,因为实际上并没有预料到).这让我们遇到了一个更严重的问题 - 在测试案例中没有实际测试过 - 它没有任何期望.我们对测试的内容产生了错误的认识.

问题:

我想尽快抓住这些错误.您认为我应该如何处理这个问题?

思考:

  • 如果没有对它做出任何期望(不确定是否jasmine有这样的内置),它会以某种方式使测试用例失败
  • expect()如果"期望"部分没有调用任何内容,则"修补" 并发出警告/引发错误
  • 使用静态代码分析 - 定义自定义eslint规则

javascript testing end-to-end jasmine protractor

14
推荐指数
1
解决办法
778
查看次数