Как выбрать значение опции выпадающего меню с помощью 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

  1. Элемент списка

открытый класс 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();

}

}