量角器:如果未显示元素,则继续测试

时间:2019-08-23 13:05:29

标签: jasmine protractor try-catch

使用量角器,我正在测试单击双文件图标时是否列出了复制的文件(如果有)。所以我想创建一个测试,在该测试中我将检查双文件图标并单击它,并期望该列表已打开。但是,如果没有双文件图标,我想记录消息。

我尝试过if / else并尝试/捕获 isDisplayed(),ispresent(),(in)visibilityOf() 并且总是相同的结果:如果显示了element,则测试通过。 如果未显示元素,则测试失败

it('should check if assignment has double files', () => {
    try {
        element.dubleFilesIcon.isDisplayed().then(function() {
            console.log('There ARE double files for this assignment!!!');
            assignmentHeader.doubleFiles();
            expect(element.doubleFilesindicator.isDisplayed()).toBe(true);
        }, function(err) {
            console.error('error' + err);
            throw err;
        });
    } catch (err) {
        console.log('There ARE NO double files for this assignment!!!');
        expect(element.doubleFilesindicator).toBe(false);
    }
});

这是错误: 1)作业标头测试用例应检查作业是否包含双重文件   -失败:使用定位器找不到元素:按(css选择器,'')

我显然做错了,但我不知道怎么办

2 个答案:

答案 0 :(得分:0)

isDisplayed()用于知道DOM中存在的元素。您需要先使用isPresent()

检查其是否存在。
element.dubleFilesIcon.isPresent().then(function() {
    console.log('There ARE double files for this assignment!!!');
    assignmentHeader.doubleFiles();
    expect(element.doubleFilesindicator.isDisplayed()).toBe(true);
});

此外,如果您希望测试在不存在/未显示的情况下失败,则可以使用以下方法:

it('should check if assignment has double files', (done) => {
    element.dubleFilesIcon.isPresent().then(function(present) {
        if (present) {
            console.log('There ARE double files for this assignment!!!');
            assignmentHeader.doubleFiles();
            expect(element.doubleFilesindicator.isDisplayed()).toBe(true);
            done();
        } else {
            // Here I think you want to test if dubleFilesIcon is NOT present
            // Then expect the files indicator not to be present, which is a bit 
            // redundant. But anyway:  
            expect(element.doubleFilesindicator.isPresent()).toBe(false);
        }
    });

});

答案 1 :(得分:0)

最后我已经做到了:只是在else块中添加了done.call()。这是工作。不知道如何,但确实如此:

type Name = 'a' | 'b' | 'c';

type Items =
{
    [Key in Name]?: Item<Key>;
};

interface Item <Name>
{
    name: Name;
};

const items: Items =
{
    // Type valid
    a:
    {
        name: 'a'
    },
    // Type error
    b:
    {
        name: 'c'
    }
};