IT story

Selenium (Python)을 사용하여 드롭 다운 메뉴 옵션 값을 선택하는 방법

hot-time 2020. 6. 23. 07:23
반응형

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(...)작동하지 않았다.


클릭이 목록을 채우기 위해 일종의 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 에서 확인할 수 있습니다.


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')

또한보십시오:


먼저 Select 클래스를 가져 와서 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)

나는 많은 것을 시도했지만 내 드롭 다운이 테이블 안에 있었고 간단한 선택 작업을 수행 할 수 없었습니다. 아래 솔루션 만 작동했습니다. 여기에서 드롭 다운 요소를 강조 표시하고 원하는 값을 얻을 때까지 아래쪽 화살표를 누릅니다.

        #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)

아무 것도 클릭 할 필요가 없습니다. 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>

파이썬 :

fruit_field = browser.find_element_by_xpath("//input[@name='fruits']")
fruit_field.send_keys("Mango")

그게 다야.


You can use a css selector combination a well

driver.find_element_by_css_selector("#fruits01 [value='1']").click()

Change the 1 in the attribute = value css selector to the value corresponding with the desired fruit.


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)

It will work fine


The best way to use selenium.webdriver.support.ui.Select class to work to with dropdown selection but some time it does not work as expected due to designing issue or other issues of the HTML.

In this type of situation you can also prefer as alternate solution using execute_script() as below :-

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);

It works with option value:

from selenium import webdriver
b = webdriver.Firefox()
b.find_element_by_xpath("//select[@class='class_name']/option[@value='option_value']").click()

  1. List item

public class 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();

}

}

참고URL : https://stackoverflow.com/questions/7867537/how-to-select-a-drop-down-menu-option-value-with-selenium-python

반응형