使用 Python Selenium 从下拉菜单中获取当前 <select> 值
getting current <select> value from drop-down menu with Python Selenium
我正在使用 Selenium Python 检查网页下拉字段中的选定值。我想打印出所选值是什么。我从打印出来的下拉列表中获取所有值。
例如。下拉列表包含以下值的列表:"Floating Point"、"Date/Time"、"Text string"、"Integer"
例如。所选值为 "Text String"
当我打印它打印出的值时 "Floating pointDate/timeText stringInteger"
我的代码片段是:
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
获取元素在我的基地class,实现是:
# 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
HTML是:
<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"/>
如何打印出所选值?
我尝试使用 first_selected_option 但出现以下错误:
Traceback (most recent call last):
File "C:\Webdriver\ClearCore 501 Regression Test\ClearCore 501 - Regression Test\TestCases\DataObjectsPage_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:\Webdriver\ClearCore 501 Regression Test\ClearCore 501 - Regression Test\Pages\data_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:\Webdriver\ClearCore 501 Regression Test\ClearCore 501 - Regression Test\Pages\data_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'
我的代码片段是:
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
我从这个 post 中得到了 Python 的片段以使用 first_selected_option:
https://sqa.stackexchange.com/questions/12029/how-do-i-work-with-dropdowns-in-selenium-webdriver
为什么 first_selected_option 不起作用?请问语法是什么?
谢谢,
里亚兹
user_defined_type_dropdown_element
是 <select>
标签,这就是为什么您在打印时获得所有选项的原因。如果您想要选择的选项,请使用 Select
class 和 first_selected_option
# 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")
检查 Select 下是否有 4 个选项,因此如果您想获取每个选项的值,则必须 select 每个选项。
在你的 Xpath 中使用这个作为第一个选项值
//table[@id="data_configuration_edit_data_object_tab_details_tb_fields"]/tbody/tr[1]//td[3]//select//option[1]
对于 Python-Selenium Dropdown 代码,下面的代码可用于从下拉列表中初始获取所选值,并通过使用像 Select_by_value 或 Select_by_index
在下面的代码中,我们首先收集“dropdown_value”中下拉列表的当前值,稍后我们可以设置一些条件来验证它
----------
get_value = driver.find_element_by_id("id")
dropdown_value = get_value.get_attribute("value")
----------
我正在使用 Selenium Python 检查网页下拉字段中的选定值。我想打印出所选值是什么。我从打印出来的下拉列表中获取所有值。 例如。下拉列表包含以下值的列表:"Floating Point"、"Date/Time"、"Text string"、"Integer" 例如。所选值为 "Text String" 当我打印它打印出的值时 "Floating pointDate/timeText stringInteger"
我的代码片段是:
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
获取元素在我的基地class,实现是:
# 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
HTML是:
<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"/>
如何打印出所选值?
我尝试使用 first_selected_option 但出现以下错误:
Traceback (most recent call last):
File "C:\Webdriver\ClearCore 501 Regression Test\ClearCore 501 - Regression Test\TestCases\DataObjectsPage_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:\Webdriver\ClearCore 501 Regression Test\ClearCore 501 - Regression Test\Pages\data_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:\Webdriver\ClearCore 501 Regression Test\ClearCore 501 - Regression Test\Pages\data_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'
我的代码片段是:
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
我从这个 post 中得到了 Python 的片段以使用 first_selected_option: https://sqa.stackexchange.com/questions/12029/how-do-i-work-with-dropdowns-in-selenium-webdriver
为什么 first_selected_option 不起作用?请问语法是什么?
谢谢, 里亚兹
user_defined_type_dropdown_element
是 <select>
标签,这就是为什么您在打印时获得所有选项的原因。如果您想要选择的选项,请使用 Select
class 和 first_selected_option
# 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")
检查 Select 下是否有 4 个选项,因此如果您想获取每个选项的值,则必须 select 每个选项。
在你的 Xpath 中使用这个作为第一个选项值
//table[@id="data_configuration_edit_data_object_tab_details_tb_fields"]/tbody/tr[1]//td[3]//select//option[1]
对于 Python-Selenium Dropdown 代码,下面的代码可用于从下拉列表中初始获取所选值,并通过使用像 Select_by_value 或 Select_by_index 在下面的代码中,我们首先收集“dropdown_value”中下拉列表的当前值,稍后我们可以设置一些条件来验证它
----------
get_value = driver.find_element_by_id("id")
dropdown_value = get_value.get_attribute("value")
----------