2011-10-23 14 views
68

Açılır menüden bir öğe seçmem gerekiyor.Selenyum - Python - açılır menü seçenek değeri

Örneğin, bu açmak:

<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. Bu nedenle ilk önce üzerine tıklayın gerekiyor. Bunu yapmak:

inputElementFruits = driver.find_element_by_xpath("//select["id='fruits']).click() 
(Tamam, bu menü açılıyor)

  1. Ve iyi eleman seçmek zorunda sonra, Mango Diyelim ki. inputElementFruits.send_keys(...) ile farklı bir şey deneyin ama işe yaramadı.

cevap

49

Tıklamanız, listenizi doldurmak için bir çeşit ajax araması yapmıyorsa, gerçekten tıklamayı yürütmeniz gerekmez.

Öğeyi bulup istediğiniz seçenekleri seçerek numaralandırın. Okuyabiliyorsun

from selenium import webdriver 
b = webdriver.Firefox() 
b.find_element_by_xpath("//select[@name='element_name']/option[text()='option_text']").click() 

daha: İşte

bir örnektir

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

Ayrıca bkz:
https://sqa.stackexchange.com/questions/1355/unable-to-select-an-option-using-seleniums-python-webdriver

+7

vardır. – alecxe

+0

Ben 'find_by_id' kullanıyorum varsa ne yapmalıyım? nasıl ardından değeri tedarik mi? Ayrıca, bir elementin xpathını nasıl bulabilirim? –

118

Selenyum select -> option yapıları ile çalışmak için uygun bir Select class sağlamaktadır:

+0

Bu gitmek için harika bir yoldur ve fiili yöntem olmalıdır. Ancak, formun yazarı, seçkin bir HTML öğesini doğru şekilde ayarlamamışsa, daha geniş "xpath" sürümünü kullanmanız gerekebileceğini not edeceğim. Sadece giriş alanlarını kullanıyorsa, xpath çalışmalıdır. – Matthew

0

iyi yolu açılır seçimi ile çalışmak için selenium.webdriver.support.ui.Select sınıfını kullanmak fakat sorun veya HTML başka sorunlar tasarlamaya beklendiği gibi çalışmıyor biraz zaman. Bir sürü birçok şey denedik ama benim açılan aşağı bir tablo içinde oldu ve ben mümkün değildi

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

-: Ayrıca aşağıda execute_script() kullanarak alternatif çözüm olarak tercih edebilirsiniz durumun Bu tür

Basit bir seçim işlemi gerçekleştirin. Sadece aşağıdaki çözüm işe yaradı. İşte elem açılır vurgulama ve istenilen değer elde kadar oku bastırarak am -

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

düzgün çalışmaz

2

öncelikle Seç sınıfını içe gerekir ve ardından oluşturmak gerekir Select sınıfının örneği. Seçme sınıfı örneğini oluşturduktan sonra, açılır menüdeki seçenekleri seçmek için bu örnekte seçerek yöntemler gerçekleştirebilirsiniz. İşte Select` sınıf Yayınladığım cevabı bakın çözmek sorun çok daha kolay hale getirir `kullanarak kod Bilginize

from selenium.webdriver.support.select import Select 

select_fr = Select(driver.find_element_by_id("fruits01") 
select_fr.select_by_index(0)