Как выбрать значение опции выпадающего меню с помощью Selenium (Python)
Мне нужно выбрать элемент из выпадающего меню.
Например:
<select id="fruits01" class="select" name="fruits">
<option value="0">Choose your fruits:</option>
<option value="1">Banana</option>
<option value="2">Mango</option>
</select>
1) Сначала я должен нажать на него. Я сделаю это:
inputElementFruits = driver.find_element_by_xpath("//select[id='fruits']").click()
2) После этого мне нужно выбрать хороший элемент, скажем, Mango
.
Я пытался сделать это с inputElementFruits.send_keys(...)
но это не сработало.
Ответы
Ответ 1
Если ваш клик не запускает какой-либо вызов ajax для заполнения вашего списка, вам фактически не нужно выполнять клик.
Просто найдите элемент, а затем перечислите параметры, выбрав нужные вам параметры.
Вот пример:
from selenium import webdriver
b = webdriver.Firefox()
b.find_element_by_xpath("//select[@name='element_name']/option[text()='option_text']").click()
Вы можете прочитать больше:
https://sqa.stackexchange.com/questions/1355/unable-to-select-an-option-using-seleniums-python-webdriver
Ответ 2
Selenium предоставляет удобный класс Select
для работы с конструкциями select -> option
:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
driver = webdriver.Firefox()
driver.get('url')
select = Select(driver.find_element_by_id('fruits01'))
# select by visible text
select.select_by_visible_text('Banana')
# select by value
select.select_by_value('1')
Смотрите также:
Ответ 3
сначала вам нужно импортировать класс Select, а затем вам нужно создать экземпляр класса Select. После создания экземпляра класса Select вы можете выполнить методы выбора для этого экземпляра, чтобы выбрать параметры из раскрывающегося списка. Вот код
from selenium.webdriver.support.select import Select
select_fr = Select(driver.find_element_by_id("fruits01"))
select_fr.select_by_index(0)
Ответ 4
Я пробовал много чего, но мое падение было внутри таблицы, и я не смог выполнить операцию простого выбора. Работало только нижеприведенное решение. Здесь я выделяю drop down elem и нажимаю стрелку вниз, пока не получится желаемое значение -
#identify the drop down element
elem = browser.find_element_by_name(objectVal)
for option in elem.find_elements_by_tag_name('option'):
if option.text == value:
break
else:
ARROW_DOWN = u'\ue015'
elem.send_keys(ARROW_DOWN)
Ответ 5
Вам не нужно ничего нажимать. Используйте поиск по xpath или как хотите, а затем используйте ключи отправки
Для вашего примера: HTML:
<select id="fruits01" class="select" name="fruits">
<option value="0">Choose your fruits:</option>
<option value="1">Banana</option>
<option value="2">Mango</option>
</select>
Python:
fruit_field = browser.find_element_by_xpath("//input[@name='fruits']")
fruit_field.send_keys("Mango")
Это.
Ответ 6
Вы можете использовать комбинацию селектора CSS хорошо
driver.find_element_by_css_selector("#fruits01 [value='1']").click()
Измените 1 в селекторе attribute = value css на значение, соответствующее желаемому фрукту.
Ответ 7
from selenium.webdriver.support.ui import Select
driver = webdriver.Ie(".\\IEDriverServer.exe")
driver.get("https://test.com")
select = Select(driver.find_element_by_xpath("""//input[@name='n_name']"""))
select.select_by_index(2)
Он отлично работает
Ответ 8
Лучший способ использовать класс selenium.webdriver.support.ui.Select
для работы с выпадающим списком, но некоторое время он не работает должным образом из-за проблемы разработки или других проблем HTML.
В этом типе ситуации вы также можете выбрать альтернативное решение, используя execute_script()
, как показано ниже: -
option_visible_text = "Banana"
select = driver.find_element_by_id("fruits01")
#now use this to select option from dropdown by visible text
driver.execute_script("var select = arguments[0]; for(var i = 0; i < select.options.length; i++){ if(select.options[i].text == arguments[1]){ select.options[i].selected = true; } }", select, option_visible_text);
Ответ 9
Работает со значением параметра:
from selenium import webdriver
b = webdriver.Firefox()
b.find_element_by_xpath("//select[@class='class_name']/option[@value='option_value']").click()
Ответ 10
- Элемент списка
открытый класс ListBoxMultiple {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
System.setProperty("webdriver.chrome.driver", "./drivers/chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("file:///C:/Users/Amitabh/Desktop/hotel2.html");//open the website
driver.manage().window().maximize();
WebElement hotel = driver.findElement(By.id("maarya"));//get the element
Select sel=new Select(hotel);//for handling list box
//isMultiple
if(sel.isMultiple()){
System.out.println("it is multi select list");
}
else{
System.out.println("it is single select list");
}
//select option
sel.selectByIndex(1);// you can select by index values
sel.selectByValue("p");//you can select by value
sel.selectByVisibleText("Fish");// you can also select by visible text of the options
//deselect option but this is possible only in case of multiple lists
Thread.sleep(1000);
sel.deselectByIndex(1);
sel.deselectAll();
//getOptions
List<WebElement> options = sel.getOptions();
int count=options.size();
System.out.println("Total options: "+count);
for(WebElement opt:options){ // getting text of every elements
String text=opt.getText();
System.out.println(text);
}
//select all options
for(int i=0;i<count;i++){
sel.selectByIndex(i);
Thread.sleep(1000);
}
driver.quit();
}
}