Protractor 在每一件事发生之前

Protractor 在每一件事发生之前,protractor,Protractor,我正在尝试使用量角器对我们的一页进行e2e测试。 这些页面在周围系统的iframe中运行 因此,为了能够测试我的页面,我必须在“它('概述打开…)之前完成所有的事情。我并不是说我必须以我已经完成的方式完成它们。如果有更好的方法,请告诉我 现在我的问题是“erradclose在“Overview opened”中的测试之前运行”。 我是否做错了什么或误解了量角器的工作原理 describe('toplevel test', function() { var login = new logi

我正在尝试使用量角器对我们的一页进行e2e测试。 这些页面在周围系统的iframe中运行

因此,为了能够测试我的页面,我必须在“它('概述打开…)之前完成所有的事情。我并不是说我必须以我已经完成的方式完成它们。如果有更好的方法,请告诉我

现在我的问题是“erradclose在“Overview opened”中的测试之前运行”。 我是否做错了什么或误解了量角器的工作原理

describe('toplevel test', function() {
    var login = new loginPage();
    var role = new roleSelectionPage();
    var errand = new overViewAndErrand(login.getBaseUrl());

    beforeEach(function() {
        login.getPage(); //Goes to login page and logs in
    });

    it('should log in', function () {

        expect(element(by.model("therole")).isDisplayed());

        describe('Select role', function() {

            beforeEach(function () {
                role.selectRole(); //Selects role on page after login and ends up at next page
            });


            it('Role selected', function() {
                expect(element(by.css('a[href*="/OverviewNext"]')) !== undefined);

                describe('Open overview', function() {
                    beforeAll(function() {
                        errand.open('name of errand'); //Selects errand and clicks on button, iframe i opened
                    });

                    afterEach(function() {
                        errand.close(); // Leaves the iframe and clicks on remove errand
                    });

                    it ('Overview opened', function() {

                        describe('Test form', function() {
                            browser.sleep(5000); 
                            it ('test', function() {
                                browser.sleep(500);
                                element(by.model("modelvalue")).sendKeys('Ture Trana').then(function() {console.log('Ture Trana')});                                                             
                            });
                        });
                    });
                });
            });
        });
    });
});
作为对简单问题的回答

我希望如何运行我的测试是这样的


其中,所有selectRole、createErrand、openErrand都涉及到至少一个页面,单击一些按钮并在列表中进行选择。

您不应该在其中嵌套descripe()

在开始新测试之前,应先关闭此测试 示例:在开始新的描述之前,应先关闭此项

it('Role selected', function() {
            expect(element(by.css('a[href*="/OverviewNext"]')) !== undefined);

您不应该将descripe()嵌套在它()中

在开始新测试之前,应先关闭此测试 示例:在开始新的描述之前,应先关闭此项

it('Role selected', function() {
            expect(element(by.css('a[href*="/OverviewNext"]')) !== undefined);

下面是一个嵌套描述的示例,对我很有用

describe('overview page', () => { let hostUrl = configMock[0].response.data.URL; beforeAll(() => { //do magic }); describe('all statement cards', () => { beforeAll(() => { browser.get(`${hostUrl}/z/y/1/g`); browser.waitForAngular(); }); describe('Campaign overview', () => { beforeEach(() => { //before each magic }); it('has correct data for Delivered', () => { expect(delivered.getText()).toEqual('1.6k'); }); }); }); }); 描述('概述页',()=>{ 让hostUrl=configMock[0]。response.data.URL; 以前(()=>{ //变魔术 }); 描述('所有报表卡',()=>{ 以前(()=>{ get(`${hostUrl}/z/y/1/g`); browser.waitForAngular(); }); 描述('活动概述',()=>{ 在每个之前(()=>{ //每次魔术之前 }); 它('提供了正确的数据',()=>{ expect(delivered.getText()).toEqual('1.6k'); }); }); }); });
从这一点开始,我认为您可以根据自己的需要对其进行调整。

下面是一个嵌套描述的示例,对我很有用

describe('overview page', () => { let hostUrl = configMock[0].response.data.URL; beforeAll(() => { //do magic }); describe('all statement cards', () => { beforeAll(() => { browser.get(`${hostUrl}/z/y/1/g`); browser.waitForAngular(); }); describe('Campaign overview', () => { beforeEach(() => { //before each magic }); it('has correct data for Delivered', () => { expect(delivered.getText()).toEqual('1.6k'); }); }); }); }); 描述('概述页',()=>{ 让hostUrl=configMock[0]。response.data.URL; 以前(()=>{ //变魔术 }); 描述('所有报表卡',()=>{ 以前(()=>{ get(`${hostUrl}/z/y/1/g`); browser.waitForAngular(); }); 描述('活动概述',()=>{ 在每个之前(()=>{ //每次魔术之前 }); 它('提供了正确的数据',()=>{ expect(delivered.getText()).toEqual('1.6k'); }); }); }); });
从这一点开始,我想你可以根据自己的需要来调整它。

平铺通常比嵌套的更好、更容易。你真的必须嵌套它并描述那么多吗?老实说,我不知道。平铺通常比嵌套的更好、更容易。你真的必须嵌套它并描述那么多吗?老实说,我不知道。它变成了嵌套的因为我的第一个版本根本不起作用。这几乎起作用了。请参阅我的第一个代码块下面添加的伪代码。登录和角色选择部分实际上不是我需要测试的东西。这部分应该由周围系统的制造者来完成。但要进入“我的“页面所有其他部分都需要完成。由于我的第一个版本根本不起作用,它变成了这个嵌套的东西。这几乎可以工作。请参阅我的第一个代码块下面添加的伪代码。登录和角色选择部分真的不需要测试。这部分应该由周围系统的制造者完成。但要进入“我的”页面所有其他部分都需要完成。再修改一下(拼写?)我有一个简单的版本,似乎可以工作。现在我所要做的就是让它做所有需要的测试。谢谢大家让我的头朝着正确的方向转。你也可以有嵌套结构,但你必须密切注意你想做的任何事,特别是如果你想在嵌套内玩前后挂钩的话经过更多的修改(拼写?)后,我有了一个简单的版本,似乎可以工作。现在我要做的就是让它做所有需要的测试。谢谢大家把我的头转向正确的方向。你也可以有嵌套结构,但你必须密切注意你想做的任何事情,特别是如果你想在嵌套组中使用前后挂钩;)