Angularjs 在使用E2E测试的下拉量角器中有多个包含相同文本的选项时,如何选择任何特定选项

Angularjs 在使用E2E测试的下拉量角器中有多个包含相同文本的选项时,如何选择任何特定选项,angularjs,jasmine,protractor,Angularjs,Jasmine,Protractor,我试图从下拉列表中选择一个选项“India”,用于使用量角器进行角度e2e测试 以下是选择选项的代码段: <select id="countryCode" class="form-control nux-select input-md ng-touched ng-dirty ng-valid-parse ng-valid ng-valid-required" required="" data-ng-model="selectedCountry" data-ng-options="c.cou

我试图从下拉列表中选择一个选项“India”,用于使用量角器进行角度e2e测试

以下是选择选项的代码段:

<select id="countryCode" class="form-control nux-select input-md ng-touched ng-dirty ng-valid-parse ng-valid ng-valid-required" required="" data-ng-model="selectedCountry" data-ng-options="c.country for c in country" name="countryCode">
<option class="" selected="" value="">-- select --</option>
<option value="0">Afghanistan</option>
<option value="1">Albania</option>
.
.
.
<option value="29">Brazil</option>
<option value="30">British Indian Ocean Territory</option>
.
.
.
<option value="98">India</option>
<option value="99">Indonesia</option>
但随着“英属印度洋领土”选项的出现,它将选择这一选项而不是“印度”

因此,我尝试了以下方法,效果良好:

element(by.xpath('//select[@id="countryCode"]/option[98]')).click();
但由于我正在硬编码,下拉列表中可能会添加新的值,有人能给我提出不同的实现方法吗

element.all(by.cssContainingText('option', 'India')).then(function(items) {
  expect(items.length).toBe(2);
  expect(items[0].getText()).toBe('British Indian Ocean Territory');
  expect(items[1].getText()).toBe('India');
});

我不确定这是否是最好的解决办法,但它应该有效。只有在添加包含“India”的新值的情况下,它才会稳定,但它看起来并不现实。

其他selenium语言绑定有
select->option
HTML结构,这些结构通过一个方便的
select
类抽象,公开了不同的方便方法,例如(python):

在量角器中,没有内置这样的东西,但正如@dmitankin在主题中善意地建议的那样,您可以构建一个量角器并重用,非常透明:

var mySelect = new SelectWrapper(by.id('countryCode'));
mySelect.selectByText('India');
仅供参考,
selectByText()
这里基于检查选项文本的xpath表达式:

SelectWrapper.prototype.selectByText = function(text) {
    return this.webElement.all(by.xpath('option[.="' + text + '"]')).click();   
};

有一种方法可以使用正则表达式来实现这一点!但我不知道怎么做!
var mySelect = new SelectWrapper(by.id('countryCode'));
mySelect.selectByText('India');
SelectWrapper.prototype.selectByText = function(text) {
    return this.webElement.all(by.xpath('option[.="' + text + '"]')).click();   
};