当前位置: 首页 > 知识库问答 >
问题:

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

越开畅
2023-03-14

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

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'."
    });
}

您可以看到一些尝试,我已经在一些我尝试过的事情中包含了WebStorm发出的警告。

我已经调查了这个关于选择一个选项的SO帖子。(如何在下拉protractorjs e2e测试中选择选项)与这篇文章不同,我的目标不是选择选项,而是检查下拉列表,确定列表中是否存在选项,或者列表中是否不存在选项。

==编辑日期:2016年12月16日===

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

public expectDropdownListContains(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.
    var foundOptions = element(by.id(dropdownListID)).$$('option').filter(function (option) {
        return option.getText().then(function (text) {
            return text === optionText;
        });
    });

    if (isPresent === true) {
        expect(foundOptions.count()).toBeGreaterThan(0);
    } else {
        expect(foundOptions.count()).toEqual(0);
    }
}

共有1个答案

施永宁
2023-03-14

你可以用不同的方法来处理它,但是这里有一个想法——使用map()来获取所有的选项文本,然后使用toContain()jasmine匹配器来检查是否有所需的选项:

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

    expect(allOptions).toContain(optionText);
}

或者,您可以通过文本过滤()所需的选项,然后期望您找到一些东西:

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);
}

还有一种选择-

 类似资料:
  • 我正在努力尝试从以下下拉菜单中选择一个名为“某些产品”的产品。'id="s2id_autogen81"'是新的ID元素,我使用该ID来抓取项目,但它被更改为这个自动生成值,我不确定要使用量角器抓取什么。 从下拉菜单中选择它 从选择后的下拉列表中

  • 仍然是新的量角器,茉莉等。 今天,我正在尝试在我的一个测试中与下拉选项列表进行交互。 这是: var 选择下降 = 元素(按.css(“.下拉列表”);所有选项 = 元素(按选项(“某些选项”)); 现在点击下拉列表 selectDropDown.click(); 单击索引为 2 的下拉列表中的“选项” allOptions.get(2). Click(); 一些用于断言的代码。。。。 现在的问题

  • 我是新的量角器,我正在执行一些e2e测试,我在最后一个问题,当我试图调用下拉列表并选择其中一个选项时。 这是我的代码: 我每次得到的是: 这个错误怎么可能? 提前感谢您的帮助。

  • 我希望编写一个量角器方法,该方法将从此下拉列表中选择值。下拉列表包含 4 个值,其中一个是“增量”。如何从此选择器中选择值,因为它没有任何我可以使用的选项标记。 我意识到实际选项在另一个tag.How我应该选择选项吗?下面的方法似乎不起作用。 element(by . CSS containing text(' mat-select-panel mat-select-content。mat-选项。

  • 这是我当前的代码,其中我手动选择每个下拉列表并选择它们各自的值。:

  • 我明白我需要用硒,但我不知道怎么用。结果始终是单个字符串的列表。理想情况下,我希望返回两个列表:一个带有unix datestamp(option value=“1576627200”),另一个带有“normal”日期(即18/12/2019)的列表。 任何帮助都将不胜感激。