Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Как выбрать значение из селекта (option, value)?

locators
java
webdriver
Теги: #<Tag:0x00007fedb7ef1a30> #<Tag:0x00007fedb7ef1648> #<Tag:0x00007fedb7ef1328>

(stek) #1

Здравствуйте. Подскажите пожалуйста, как выбрать значение из селекта.

WebElement subject = chromeDriver.findElement(By.xpath("//*[@id=“order_skill”]/div[1]/div[1]"));
subject.click();


(Nik Sidorenko) #2

Попробуйте через Seleniun Select
http://www.autotest.org.ua/selenium-webdriver-select/


(Til Ulenshpigel) #3

Как вариант, можно сделать одноименный Enum (Movies, Music, Photo etc.), в котором будут перечислены все элементы селекта. В значении Enum’а будут храниться названия категорий. Делаем один локатор общий для всех вариантов селекта по названию категории, но вместо названия %s, который прогоняется через Formatter и в итоге получаете локатор для выбранной категории. В дальнейшем, можно добавить по принципу композиции в тестовый класс (т.о. сможете, при желании\необходимости параметризовать тест по нужной категории, а можете и не делать это:) Если нужен пример кода - пишите, сейчас, к сожалению, под рукой нет.
P.S. Selenium WD


(Pavel Ozerov) #4

Если я правильно понимаю, это что-то вроде выпадающего списка. В таком случае я бы использовал Selenide и сделал бы что-то вроде:

public class SomeClass {

private static final SelenideElement SOME_NAME1 = $(By.name(“order_skill”));
private static final SelenideElement SOME_NAME2 = $(“option[value=“15”]”);

public static void someFunctionName() {
SOME_NAME1.click();
SOME_NAME2.waitUntil(visible, 3000).click();
}
}

Использовать xpath при наличии нормального css, на мой личный взгляд, не очень правильно.


(Михаил Избродин) #5

Для вашего примера я бы сделал вот так.

Selenium:
By byCss = By.cssSelector("#order_skill");
WebElement dropdown = driver.findElement(byCss);
Select select = new Select(dropdown);

//Ищем по атрибуту value
select.selectByValue(“15”);

//Ищем по тексту
select.selectByVisibleText(“Photo”);

//Ищем по индексу элемента
select.selectByIndex(1);

Selenide:
SelenideElement dropdownList = $("#order_skill");

//Ищем по атрибуту value
dropdownList.selectOptionByValue(“15”);

//Ищем по тексту
dropdownList.selectOptionContainingText(“Photo”);

//Ищем по индексу элемента
dropdownList.selectOption(1);


(rus) #6

нельзя сразу выбрать нужный? Например кликать на .select_field option[value="15"]