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