我试图从下拉列表中选择一个“印度”选项,用于使用量角器的角度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.cssContainingText('option', 'India')).click();
但是,在选择此选项而不是“印度”之前,“英属印度洋领地”选项即将推出。
所以我尝试如下,它的工作原理:
element(by.xpath('//select[@id="countryCode"]/option[98]')).click();
但是因为我很难编码并且可能会在下拉列表中添加新值,任何人都可以建议我采用不同的方式来实现它。
答案 0 :(得分:2)
其他selenium语言绑定具有select->option
HTML构造,抽象方便的Select
类暴露了不同的方便方法,例如(python):
select = Select(driver.find_element_by_id('countryCode'))
select.select_by_visible_text('India')
在量角器中,没有内置的东西,但正如Select -> option abstraction主题中@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();
};
答案 1 :(得分:0)
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'的新值,它将不会稳定,但它看起来不太真实。