getting current <select> value from drop-down menu with Python Selenium

Question:

I am checking the selected value from a drop down field on a web page in Selenium Python. I would like to print out what the selected value is. I am getting all of the values from the drop down printed out.
E.g. The drop down has a list of the following values: “Floating Point”, “Date/Time”, “Text string”, “Integer”
E.g. The selected value is “Text String”
When i print the value it is printing out “Floating pointDate/timeText stringInteger”

My code snippet is:

def get_selected_value_from_user_defined_type_dropdown(self, type):
    # Params : the selected value for the user defined type dropdown e.g. Text string
    user_defined_type_dropdown_element = self.get_element(By.XPATH, '//table[@id="data_configuration_edit_data_object_tab_details_tb_fields"]/tbody/tr[1]//td[3]//select')
    print ("------------------------------")
    print user_defined_type_dropdown_element.text
    return user_defined_type_dropdown_element.text

Get Element is in my base class, the implmentation is:

# returns the element if found
def get_element(self, how, what):
    # params how: By locator type
    # params what: locator value
    try:
        element = self.driver.find_element(by=how, value=what)
    except NoSuchElementException, e:
        print what
        print "Element not found "
        print e
        screenshot_name = how + what + get_datetime_now() # create screenshot name of the name of the element + locator + todays date time.  This way the screenshot name will be unique and be able to save
        self.save_screenshot(screenshot_name)
        raise
    return element

The HTML is:

<table id="data_configuration_edit_data_object_tab_details_tb_fields" class="GJPPK2LBJE border" cellspacing="0" __gwtcellbasedwidgetimpldispatchingfocus="true" __gwtcellbasedwidgetimpldispatchingblur="true">
<thead aria-hidden="false">
<colgroup>
<tbody style="">
    <tr class="GJPPK2LBCD GJPPK2LBJD" __gwt_subrow="0" __gwt_row="0">
    <td class="GJPPK2LBBD GJPPK2LBDD GJPPK2LBED GJPPK2LBKD">
    <td class="GJPPK2LBBD GJPPK2LBDD GJPPK2LBKD">
    <td class="GJPPK2LBBD GJPPK2LBDD GJPPK2LBKD">
        <div __gwt_cell="cell-gwt-uid-214" style="outline-style:none;">
            <select tabindex="-1">
                <option value="Floating point">Floating point</option>
                <option value="Date/time">Date/time</option>
                <option selected="selected" value="Text string">Text string</option>
                <option value="Integer">Integer</option>
        </select>
        </div>
    </td>
        <td class="GJPPK2LBBD GJPPK2LBDD GJPPK2LBOD GJPPK2LBKD">
    </tr>
    <tr class="GJPPK2LBCE" __gwt_subrow="0" __gwt_row="1">
</tbody>
<tbody style="display: none;">
<tfoot style="display: none;" aria-hidden="true"/>

How do i print out what the selected value is?

I have tried to use first_selected_option but i get the following error:

    Traceback (most recent call last):
  File "C:WebdriverClearCore 501 Regression TestClearCore 501 - Regression TestTestCasesDataObjectsPage_TestCase.py", line 294, in testk_edit_Data_Objects_ACVSEQ_Is_The_Saved_Details_Present
    self.assertTrue(data_objects_edit_page.is_value_saved_from_user_defined_type_dropdown("Text string"), "Data Objects ACVSEQ type drop down does not show the expected saved value. Please see log for details")
  File "C:WebdriverClearCore 501 Regression TestClearCore 501 - Regression TestPagesdata_objects_edit.py", line 140, in is_value_saved_from_user_defined_type_dropdown
    return self.get_selected_value_from_user_defined_type_dropdown(str(value)) == value
  File "C:WebdriverClearCore 501 Regression TestClearCore 501 - Regression TestPagesdata_objects_edit.py", line 133, in get_selected_value_from_user_defined_type_dropdown
    selected_option_element = user_defined_type_dropdown_element.first_selected_option
AttributeError: 'WebElement' object has no attribute 'first_selected_option'

My code snippet is:

def get_selected_value_from_user_defined_type_dropdown(self, type):
    #Params : the selected value for the user defined type dropdown e.g. Text string
    user_defined_type_dropdown_element = self.get_element(By.XPATH, '//table[@id="data_configuration_edit_data_object_tab_details_tb_fields"]/tbody/tr[1]//td[3]//select')
    selected_option_element = user_defined_type_dropdown_element.first_selected_option
    print ("------------------------------")
    print selected_option_element.text
    return selected_option_element.text

I got the snippet for Python to use first_selected_option from this post:
https://sqa.stackexchange.com/questions/12029/how-do-i-work-with-dropdowns-in-selenium-webdriver

Why is first_selected_option not working? What is the syntax please?

Thanks,
Riaz

Asked By: Riaz Ladhani

||

Answers:

user_defined_type_dropdown_element is the <select> tag, that is why you are getting all the options when printing it. If you want the selected option use Select class and first_selected_option

from selenium.webdriver.support.ui import Select

# initialize Select object
select = Select(user_defined_type_dropdown_element)

# to print the text
print(select.first_selected_option.text)

# to print the value
print(select.first_selected_option.get_attribute("value"))
Answered By: Guy

Check that under Select, there are 4 option’s, so u have to select each option if u want to get each option’s value.

Use this in ur Xpath for first option value

//table[@id="data_configuration_edit_data_object_tab_details_tb_fields"]/tbody/tr[1]//td[3]//select//option[1]
Answered By: noor

For Python-Selenium Dropdown code, the below code can be used to initially get the selected value form the drop down and accordingly change the value by using selenium dropdown operations like Select_by_value or Select_by_index
I the below code we are first collecting the current value of the drop down in "dropdown_value" and later we can put some condition to verify it

----------

get_value = driver.find_element_by_id("id")
dropdown_value = get_value.get_attribute("value")

----------
Answered By: Akash zawar