首页 > 解决方案 > 量角器:验证强制性输入或处理承诺

问题描述

我正在用几十个输入测试表单,主要是文本框。为了用户创建/编辑帐户,必须输入几个文本。但是,我很困惑:

describe('Validation of mandatory fields', () => {

        it('validate first name input', () => {
            expertInfo.firstNameTextBox.click();
            expertInfo.firstNameTextBox.sendKeys(Key.CONTROL + 'a', Key.DELETE);
            expertInfo.firstNameTextBox.sendKeys(Key.ENTER);
            expect(expertInfo.requiredFieldMessage.isPresent()).toBe(true); // this one pass
        });

        it('validate last name input', () => {
            expertInfo.lastNameTextBox.click().then(() => {
                expertInfo.lastNameTextBox.clear().then(() => {
                    expertInfo.save();
                    expect(expertInfo.requiredFieldMessage.isPresent()).toBe(true); // this one fails
                });
            });
        });
});

知道我的方法有什么问题吗?我是否正确处理了承诺?在第二个测试中,验证消息不会出现,用户可以编辑/创建帐户。

标签: validationjasmineprotractorangular-promise

解决方案


在 protractor/jasmine 中,有 3 种处理异步任务的方法,
1- Async/await
2- Promises
3- CallBacks 更多信息:https ://jasmine.github.io/tutorials/async 个人偏向于 async/await,因为它是最容易跟踪的。因此,在您的代码中,如果您想处理使用 async/await 返回的承诺,它将转换为:

describe('Validation of mandatory fields', () => {

    it('validate first name input', async () => {
       await expertInfo.firstNameTextBox.click();
       await expertInfo.firstNameTextBox.sendKeys(Key.CONTROL + 'a', 
       Key.DELETE);
       await expertInfo.firstNameTextBox.sendKeys(Key.ENTER);
       expect(await expertInfo.requiredFieldMessage.isPresent()).toBe(true); 
    });

    it('validate last name input', async () => {
        await  expertInfo.lastNameTextBox.click();
        await expertInfo.lastNameTextBox.clear();
        await expertInfo.save();
        expect(await expertInfo.requiredFieldMessage.isPresent()).toBe(true);
    });

});

在此期间,请走开!


推荐阅读