Выбрать → абстракция опции
В Python, Java и нескольких других привязках selenium существует очень удобная абстракция над конструкциями HTML select->option
, Select
class.
Например, представьте, что существует тег Select
:
<select id="fruits" class="select" name="fruits">
<option value="1">Banana</option>
<option value="2">Mango</option>
</select>
Вот как мы можем работать в Python:
from selenium.webdriver.support.ui import Select
select = Select(driver.find_element_by_id('fruits'))
# get all options
print select.options
# get all selected options
print select.all_selected_options
# select an option by value
select.select_by_value('1')
# select by visible text
select.select_by_visible_text('Mango')
Другими словами, это очень прозрачная и простая в использовании абстракция.
Можно ли манипулировать тегом Select
тегом в транспортирторе аналогичным образом?
Это не дубликат Как выбрать опцию при выпадающих тестах protractorjs e2e или Как щелкнуть по опции в поле выбора в тесте "Протрактор" ?.
Ответы
Ответ 1
Нет такой вещи в Транспортера, но мы можем написать свои собственные:
выберите-wrapper.js
'use strict';
var SelectWrapper = function(selector) {
this.webElement = element(selector);
};
SelectWrapper.prototype.getOptions = function() {
return this.webElement.all(by.tagName('option'));
};
SelectWrapper.prototype.getSelectedOptions = function() {
return this.webElement.all(by.css('option[selected="selected"]'));
};
SelectWrapper.prototype.selectByValue = function(value) {
return this.webElement.all(by.css('option[value="' + value + '"]')).click();
};
SelectWrapper.prototype.selectByPartialText = function(text) {
return this.webElement.all(by.cssContainingText('option', text)).click();
};
SelectWrapper.prototype.selectByText = function(text) {
return this.webElement.all(by.xpath('option[.="' + text + '"]')).click();
};
module.exports = SelectWrapper;
Использование
var SelectWrapper = require('select-wrapper');
var mySelect = new SelectWrapper(by.id('fruits'));
# select an option by value
mySelect.selectByValue('1');
# select by visible text
mySelect.selectByText('Mango');
Обратите внимание, что Выбрать - зарезервированное слово в JavaScript
Ответ 2
Запуск Protractor v.0.22.0 вы можете просто использовать
новый By.cssContainingText
локатор:
element(by.cssContainingText('option', 'Mango'));
См. ссылку API.
Ответ 3
Код с Typescript:
Тег:
by.tagName( 'параметр')
by.tagName( 'мкр-вариант')
by.tagName( 'Li')
selectOption(selector: string, item: string) {
let selectList: any;
let desiredOption: any;
selectList = element(by.css(selector));
selectList.click();
selectList.findElements(by.tagName('option'))
.then(function findMatchingOption(options: any) {
options.some(function (option: any) {
option.getText().then(function doesOptionMatch(text: string) {
if (item === text) {
desiredOption = option;
return true;
}
});
});
})
.then(function clickOption() {
if (desiredOption) {
desiredOption.click();
}
});
}
Б
selectOption('//select[@id="food"]', 'Pizza');