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()
- 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();
}
}
'IT story' 카테고리의 다른 글
JavaScript의 한 줄 문장에 중괄호가 필요합니까? (0) | 2020.06.23 |
---|---|
Maven : 사용자 정의 외부 JAR을 내 프로젝트에 연결하는 가장 좋은 방법은 무엇입니까? (0) | 2020.06.23 |
android.view.InflateException : 이진 XML 파일 행 # 12 : 클래스 팽창 오류 (0) | 2020.06.23 |
알파인 기반 도커 이미지와 함께 bash를 사용하는 방법은 무엇입니까? (0) | 2020.06.23 |
VB.NET의 여러 줄 문자열 (0) | 2020.06.23 |