J'essaie de sélectionner une option dans un élément de sélection. Cette liste déroulante contient également une zone de recherche avec saisie semi-automatique. Cela ressemble à ceci:
J'ai essayé plusieurs méthodes, mais sans succès.
Essai 1 : select_by_visible_text
<div class="field-type-taxonomy-term-reference field-name-field-activity-type field-widget-options-select form-wrapper" id="edit-field-activity-type">
<div class="form-item form-type-select form-item-field-activity-type-und">
<label for="edit-field-activity-type-und">Activiteitstype <span class="form-required" title="Dit veld is verplicht.">*</span></label>
<select class="chosen-enable form-select required chosen-processed" id="edit-field-activity-type-und" name="field_activity_type[und]" style="position: absolute; opacity: 0;">
<option value="_none">- Kies uit deze lijst -</option>
<option value="393">Begeleide uitstap - Excursie</option>
<option value="427">Beheerwerken</option>
<option value="425">Buiten - Met kinderen</option>
<option value="231">Concert</option>
<option value="389">Cursus en workshop</option>
<option value="399">Feest en eet & drinkfestijn</option>
<option value="561">Fietstocht en wandelroute</option>
<option value="387">Film</option>
<option value="565">Inventarisatie</option>
<option value="391">Kamp en vakantie</option>
<option value="415">Knutselen - Met kinderen</option>
<option value="385">Lezing en congres</option>
<option value="407">Markt en braderie</option>
<option value="409">Monument & erfgoed</option>
<option value="417">Museum - Met kinderen</option>
<option value="411">Natuur en landschap</option>
<option value="563">Observatie</option>
<option value="503">Onbepaald</option>
<option value="431">Onderzoek/Studie</option>
<option value="413">Opendeurdag</option>
<option value="397">Quiz en spel</option>
<option value="405">Tentoonstelling</option>
<option value="435">Vergadering</option>
<option value="559">Wandeling</option>
</select>
<div class="chosen-container chosen-container-single" style="width: 200px;" title="" id="edit_field_activity_type_und_chosen">
<a class="chosen-single" tabindex="-1">
<span>Begeleide uitstap - Excursie</span>
<div>
<b></b>
</div>
</a>
<div class="chosen-drop">
<div class="chosen-search">
<input type="text" autocomplete="off">
</div>
<ul class="chosen-results">
<li class="active-result result-selected" style="" data-option-array-index="0">- Kies uit deze lijst -</li>
<li class="active-result result-selected" style="" data-option-array-index="1">Begeleide uitstap - Excursie</li>
<li class="active-result" style="" data-option-array-index="2">Beheerwerken</li>
<li class="active-result" style="" data-option-array-index="3">Buiten - Met kinderen</li>
<li class="active-result" style="" data-option-array-index="4">Concert</li>
<li class="active-result" style="" data-option-array-index="5">Cursus en workshop</li>
<li class="active-result" style="" data-option-array-index="6">Feest en eet & drinkfestijn</li>
<li class="active-result" style="" data-option-array-index="7">Fietstocht en wandelroute</li>
<li class="active-result" style="" data-option-array-index="8">Film</li>
<li class="active-result" style="" data-option-array-index="9">Inventarisatie</li>
<li class="active-result" style="" data-option-array-index="10">Kamp en vakantie</li>
<li class="active-result" style="" data-option-array-index="11">Knutselen - Met kinderen</li>
<li class="active-result" style="" data-option-array-index="12">Lezing en congres</li>
<li class="active-result" style="" data-option-array-index="13">Markt en braderie</li>
<li class="active-result" style="" data-option-array-index="14">Monument & erfgoed</li>
<li class="active-result" style="" data-option-array-index="15">Museum - Met kinderen</li>
<li class="active-result" style="" data-option-array-index="16">Natuur en landschap</li>
<li class="active-result" style="" data-option-array-index="17">Observatie</li>
<li class="active-result" style="" data-option-array-index="18">Onbepaald</li>
<li class="active-result" style="" data-option-array-index="19">Onderzoek/Studie</li>
<li class="active-result" style="" data-option-array-index="20">Opendeurdag</li>
<li class="active-result" style="" data-option-array-index="21">Quiz en spel</li>
<li class="active-result" style="" data-option-array-index="22">Tentoonstelling</li>
<li class="active-result" style="" data-option-array-index="23">Vergadering</li>
<li class="active-result" style="" data-option-array-index="24">Wandeling</li>
</ul>
</div>
</div>
</div>
Essai 2: select_by_index
type_act = driver.find_element_by_xpath("//*[@id=\"edit-field-activity-type-und\"]")
for option in type_act.find_elements_by_tag_name("option"):
print(option.text)
if option.text == "Begeleide uitstap - Excursie":
option.click()
break
Essai 3: cliquer sur une option dans une boucle
type_act = Select(driver.find_element_by_name("field_activity_type[und]"))
type_act.select_by_index(1)
Code HTML de l'élément select
from selenium.webdriver.support.ui import Select
type_act = Select(driver.find_element_by_xpath("//*[@id=\"edit-field-activity-type-und\"]"))
type_act.select_by_visible_text("Begeleide uitstap - Excursie")
3 Réponses :
Vous pouvez utiliser JavaScriptExecutor cliquez ici si votre méthode de clic normale ne fonctionne pas.
Vous pouvez l'utiliser comme:
type_act = driver.find_element_by_xpath("//*[@id=\"edit-field-activity-type-und\"]")
driver.execute_script("arguments[0].click();", type_act)
Merci pour votre réponse, mais malheureusement cela ne fonctionne pas non plus.
Peut-être essayer .sendkeys () sur l'élément pour taper le texte que vous recherchez?
from selenium.webdriver.common.keys import Keys
type_act = driver.find_element_by_xpath("//*[@id=\"edit-field-activity-type-und\"]")
type_act.send_keys("Begeleide uitstap - Excursie")
type_act.send_keys(Keys.ENTER)
Merci de votre aide. Mais cela ne fonctionne pas non plus pour moi.
D'accord, je l'ai trouvé. C'était en fait le texte de la plage dans la balise a qui devait être adressé. Vous trouverez ci-dessous la solution qui a fonctionné pour moi. J'espère que cela aide aussi quelqu'un d'autre.
type_act = driver.find_element_by_xpath('//*[@id="edit_field_activity_type_und_chosen"]/a/span')
driver.execute_script("var ele=arguments[0]; ele.innerHTML = '" + row['type_act'] + "';", type_act)