Bert Carremans
Bert Carremans

Reputation: 1733

Selenium-Python: unable to click an option in a select

I'm trying to select an option in a select element. This drop-down list also contains a search box with autocompletion. It looks like this:

enter image description here

I've tried multiple ways, but without success.

Trial 1: select_by_visible_text

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

Trial 2: select_by_index

type_act = Select(driver.find_element_by_name("field_activity_type[und]"))
type_act.select_by_index(1)

Trial 3: clicking on option in a loop

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

HTML code of the select element

<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 &amp; 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 &amp; 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 &amp; 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 &amp; 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>

I'm using the chromedriver. There is no error, but nothing is selected. I'm also able to print out the options, but the click method does not seem to work. Can anyone help me out on this, please?

Upvotes: 1

Views: 218

Answers (3)

Bert Carremans
Bert Carremans

Reputation: 1733

Ok, I found it. It was actually the text in the span within the a tag that needed to be addressed. Below you can find the solution that worked for me. Hope it helps someone else too.

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)

Upvotes: 0

Randy
Randy

Reputation: 14857

Maybe try .sendkeys() on the item to type the text you're looking for?

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)

Upvotes: 1

Sameer Arora
Sameer Arora

Reputation: 4507

You can use JavaScriptExecutor click here if your normal click method is not working.
You can use it like:

type_act = driver.find_element_by_xpath("//*[@id=\"edit-field-activity-type-und\"]")
driver.execute_script("arguments[0].click();", type_act)

Upvotes: 0

Related Questions