我正在尝试编写一个可重用的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'."
});
}
答案 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,这也可能有所帮助。