Protractor 从量角器中的下拉列表中提取可见文本

Protractor 从量角器中的下拉列表中提取可见文本,protractor,Protractor,我正在尝试从没有选定选项的下拉列表中获取可见文本。 对于选择了选项的下拉列表,我使用下面的代码从下拉列表中获取值 DenominationDropdown = element(by.css('[id*="MainContent_uxDenomination"] select')); expect(DenominationDropdown.element(by.css('[selected="selected"]')).getText()).toBe('All Denominations');

我正在尝试从没有选定选项的下拉列表中获取可见文本。 对于选择了选项的下拉列表,我使用下面的代码从下拉列表中获取值

DenominationDropdown = element(by.css('[id*="MainContent_uxDenomination"] select'));
expect(DenominationDropdown.element(by.css('[selected="selected"]')).getText()).toBe('All Denominations');
在我的第二个下拉列表中,有一个选择值未填充。我想获取当前可见值(默认值),在我的例子中是“所有日期”,但下面的代码不起作用,因为没有选择的值

DatesDropdown = element(by.css('[id*="MainContent_uxDates"] select'));
expect(DatesDropdown.element(by.css('[selected="selected"]')).getText().toBe('All Dates');;
有人能建议一种在量角器中读取当前可见文本或下拉列表默认值的方法吗

下拉列表的HTML格式:

<select name="ctl00$ctl00$ctl00$ctl00$body$body$MainContent$MainContent$uxDates" id="ctl00_ctl00_ctl00_ctl00_body_body_MainContent_MainContent_uxDates" class="ClassName">
    <option value="%">All Dates</option>
    <option value="Option1">Option1</option>
    <option value="Option2">Option2</option>
     .......
</select>

所有日期
选择1
选择2
.......
getText()
应仅返回可见文本,这意味着,如果在
select
元素上调用它,则应获得当前“选定”选项:


如果它实际上没有HTML中的属性
selected=selected
,那么应该有另一种方法。我在应用程序的下拉列表中尝试了这一点,效果很好:

var el = element(by.model('myDropdown')).$('option:checked');
expect(el.getText()).toEqual('test');
注意:上面是一个下拉列表,我原以为它是
选项:selected
,但它抛出了一个无效的定位器错误。我过去也为收音机做过这样的工作:

var el = $('input[type=radio]:checked');

而且,如果您不知道,
$
的语法相当于
元素(by.css())

,在不使用$的情况下('option:checked')。您可以尝试使用addtoend元素(by.css('option:checked'))

var el=element(by.model('myDropdown')).element(by.css('option:checked'));

expect(el.getText()).toEqual('test')失败的断言返回了什么?只是一个空字符串?没有为日期下拉列表选择选项,因此它抛出错误,说明找不到元素。这对我不起作用。它为我提供了下拉列表中的所有值,并获取了一个错误,该错误期望“下拉列表中的所有值”等于“所有日期”
expect(DatesDropdown.getText()).toEqual(“所有日期”)
@NewWorld您可以发布此下拉列表的HTML表示吗?谢谢。添加了HTML的下拉列表。冈德森的回答对我有用,我仍然有兴趣知道你的见解。@NewWorld有趣,我所做的理论假设在这种情况下不起作用。关于使用
元素.all()
filter()
过滤选项,我有更多的想法,但是
:checked
CSS选择器在我看来是一种更好的方法。谢谢。这就是我使用的
expect(DatesDropdown.element(by.css('option:checked')).getText()).toEqual('All Dates')
var el = $('input[type=radio]:checked');