我试图编写一个可重用的量角器函数,它将确定下拉列表中是否存在具有指定文本的选项。这是我在尝试检查选项时创建的函数。
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);
}
}
你可以用不同的方法来处理它,但是这里有一个想法——使用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)的列表。 任何帮助都将不胜感激。