Для работы с выпадающими списками в Selenium реализован класс
Select
, который моделирует тег SELECT
и предоставляет вспомогательные методы для выбора и снятия отметки с пунктов.
Конструктор класса Select
принимает в качестве параметра WebElement
. При этом осуществляя проверку, что переданный элемент является действительно тегом SELECT
. Если проверка не проходит успешно, выбрасывает исключение UnexpectedTagNameException
.
WebElement selectElem = driver.findElement(By.tagName("select")); Select select = new Select(selectElem);
Получить все пункты выпадающего списка можно с помощью метода getOptions
. getAllSelectedOptions
— вернет все выбранные пункты списка:
List options = select.getOptions(); List selectedOptions = select.getAllSelectedOptions();
getFirstSelectedOption()
— возвращает первый выбранный пункт для списка со множественным выбором, или текущий выбранный пункт для обычного списка.
WebElement selectedOption = select.getFirstSelectedOption();
Чтобы проверить поддерживает ли список множественный выбор, можно использовать метод — isMultiple()
. Он возвращает boolean значение, основанное на атрибуте "multiple"
тега SELECT
.
Класс содержит методы для выбора и снятия выбора с пунктов списка по различным критериям: по порядковому номеру, по значению и по тексту.
- selectByVisibleText(String text) — выбирает все пункты списка, текст которых соответствует параметру
text
. - selectByIndex(int index) — выбирает пункт по заданному индексу. Индекс определяется по атрибуту
index
пункта, а не просто путем подсчета. - selectByValue(String value) — выбирает опции, атрибут value которых соответствует параметру.
Для отмены выбора опции предоставлены методы deselectByIndex
, deselectByValue
, deselectByVisibleText
, которые работают соответственно.
Также стоит обратить внимание на метод deselectAll()
— очищает выбор всех пунктов списка. Его следует использовать только если SELECT
поддерживает множественный выбор, в противном случае можно получить исключение UnsupportedOperationException
.
select.selectByVisibleText("Украина"); if ( select.isMultiple() ) { select.deselectAll() } else { select.deselectByVisibleText("Украина"); } select.selectByValue("ua"); select.selectByIndex(1);
Что-то ругается он у меня на волшебное слово WebElement. Да и библиотеки у меня такой в studio нет)
Не судите строго 🙂
Только учусь писать авто-тесты
Пытаюсь сделать следующее: На открытой странице выбрать из чек бокса значение и что бы отфильтровал по выбранному значению. Запускаю ничего не происходит. На открытой странице не какой фильтр (селект) не срабатывает 🙁
@Test
public void Page2Clients()
{
WebElement element = ib.findElement(By.id(«submit»));
Select select = new Select(ib.findElement(By.name(«status»)));
//Select select = new Select(ib.findElement(By.xpath(«//select»)));
//select.deselectAll();
//select.selectByIndex(1);
//select.selectByVisibleText(«Онлайн»);
select.selectByValue(«offline»);
element.submit();
}
Подскажите плиз в чем мая ошибка?