使用 Python Selenium 从下拉菜单中获取当前 <select> 值

新手上路,请多包涵

我正在使用 Selenium Python 检查网页下拉字段中的选定值。我想打印出所选值是什么。我从打印出来的下拉列表中获取所有值。例如,下拉列表包含以下值:“浮点数”、“日期/时间”、“文本字符串”、“整数”浮点型日期/时间文本字符串整数”

我的代码片段是:

 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

获取元素在我的基类中,实现是:

 # 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

我从这篇文章中得到了 Python 使用 first_selected_option 的代码片段: https ://sqa.stackexchange.com/questions/12029/how-do-i-work-with-dropdowns-in-selenium-webdriver

为什么 first_selected_option 不起作用?请问语法是什么?

谢谢,里亚兹

原文由 Riaz Ladhani 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

user_defined_type_dropdown_element<select> 标签,这就是为什么您在打印时获得所有选项的原因。如果你想要选择的选项使用 Select 类和 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")

原文由 Guy 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于 Python-Selenium Dropdown 代码,下面的代码可用于最初从下拉列表中获取所选值,并通过使用 selenium 下拉操作(如 Select_by_value 或 Select_by_index)相应地更改值我下面的代码我们首先收集的当前值在“dropdown_value”中下拉,稍后我们可以输入一些条件来验证它

----------

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

----------

原文由 Akash zawar 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题