如何使用量角器检查DropDown列表的内容?

时间:2015-12-16 19:08:56

标签: typescript protractor

我正在尝试编写一个可重用的Protractor函数,该函数将确定下拉列表中是否存在具有指定文本的选项。这是我在检查选项时尝试创建的函数。

spinner

你可以看到几次尝试,我已经把WebStorm发出的警告包括在我试过的一些事情中。

我在选择一个选项时调查了这篇SO帖子。 (Alex Lockwood)与该帖子不同,我的目标不是选择选项,而只是检查下拉列表并确定列表中是否存在选项,或者列表中是否存在选项。< / p>

===编辑12/16/2016 ===

以下是我从@alecxe提供的解决方案改编的代码。我更改了函数名称以使其更具可读性。这可以按预期工作。谢谢!

public expectDropdownListOptionPresence(dropdownListID: string, isPresent: boolean, optionText: string) {
    // Determine if the desired option text is present or missing from the target list.
    // Set isPresent to true when it should appear, and false when it shouldn't appear.

    // Attempt 1
    element.all(by.id(dropdownListID)).filter(function (lists) {
        // Make sure the list is visible.
        return lists.isDisplayed().then(function (isVisible) {
            return isVisible;
        }).then(function (visibleLists) {
            // Nope, "Property 'all' does not exist on type 'Boolean'."
            // visibleLists.all.getItem(by.css('option')) 
        })
    });

    // Attempt 2
    element(by.id(dropdownListID)).$('option').filter(function (listOptions) {
        // Nope, "Property 'filter' does not exist on type 'ElementFinder'."
    });
}

1 个答案:

答案 0 :(得分:1)

您可以采用不同的方法,但这里有一个想法 - 使用map()获取所有选项文本,然后使用toContain() jasmine matcher检查是否有所需选项:

public expectDropdownListOptionPresence(dropdownListID: string, optionText: string) {
    var allOptions = element(by.id(dropdownListID)).$$('option').map(function (option) {
        return option.getText();
    });

    expect(allOptions).toContain(optionText);
}

或者,您可以filter()按文字排除所需的选项,然后期望找到一些内容:

public expectDropdownListOptionPresence(dropdownListID: string, optionText: string) {
    var foundOptions = element(by.id(dropdownListID)).$$('option').filter(function (option) {
        return option.getText().then(function (text) {
            return text === optionText;
        });
    });

    expect(foundOptions.count()).toBeGreaterThan(0);
}

还有Select -> option abstraction,这也可能有所帮助。