【问题标题】:How to select option from drop down list with selenium?如何使用硒从下拉列表中选择选项?
【发布时间】:2020-10-16 17:13:02
【问题描述】:

我一直在搜索不同的网站,包括这个网站以寻求解决方案,但还没有运气,我使用 selenium 导航的网站是用 HTML4 编写的,我不确定这是否重要,但确实想包含它.

下面是我目前正在使用的尝试从下拉列表中选择特定选项的特定功能的代码。

program_selection = driver.find_element_by_id('pgmSelectList').click()
for option in program_selection.find_element_by_name('offerVB.currentProgramCode'):
    if option.text == 'New Maximum Care (Minimum 5/60 PT Warranty)':
        option.click() # select() in earlier versions of webdriver
        break

下面是我正在尝试使用的当前 HTML 元素,我也尝试过不使用最后的“.click()”,因为我已经阅读了很多我不需要这样做的地方,但是使用当前代码,我实际上打开了列表,它只是没有选择一个选项,我还尝试向元素发送箭头键以选择某些内容,但我收到一个错误消息,指出该元素没有属性 send_keys。

<select name="offerVB.currentProgramCode" onchange="return isProgramSelected()" class="tableCell" id="pgmSelectList"><option value="" selected="selected">Select</option>
      

       <option value="COMMPLANS:2018-01-03">NEW VEHICLE COMMERCIAL PLANS</option>
      

       <option value="USDCOMMPLN:2016-09-01">USED VEHICLE COMMERCIAL PLANS</option>
      

       <option value="MOPAR75:2012-01-31">MOPAR 'TARGETED' OPTIONS</option>
      

       <option value="RAMADVNTGE:2010-02-01">RAM ADVANTAGE MAXIMUM CARE</option>
      

       <option value="PWRCARE510:2009-10-01">NEW POWERTRAIN CARE (MINIMUM 5/60 PT WARRANTY)</option>
      

       <option value="ADDCARE510:2009-10-01">NEW ADDED CARE PLUS (MINIMUM 5/60 PT WARRANTY)</option>
      

       <option value="MAXCARE510:2009-10-01">NEW MAXIMUM CARE (MINIMUM 5/60 PT WARRANTY)</option>
      

       <option value="MONEYBK510:2009-10-01">MONEY BACK GUARANTEE (MINIMUM 5/60 PT WARRANTY)</option>
      

       <option value="SHRTTRMLSE:2004-11-01">NEW SHORT TERM LEASE / RETAIL OPTIONS</option>
      

       <option value="POPWTN:2004-11-01">PRE OWNED POWERTRAIN CARE PLUS</option>
      

       <option value="POADDED:2004-11-01">PRE OWNED ADDED CARE</option>
      

       <option value="POADDPLUS:2004-11-01">PRE OWNED ADDED CARE PLUS</option>
      

       <option value="POMAX:2004-11-01">PRE OWNED MAXIMUM CARE</option>
      

       <option value="GAPINS:2004-11-01">GAP</option>
      

       <option value="CONVPLNPKG:2012-10-01">CONVENIENCE PLANS AND PACKAGES</option>
      

       <option value="MAINTPLANS:2012-10-01">MAINTENANCE PLANS AND PACKAGES</option>
      

       <option value="LUBEOIL:2004-11-01">LUBE, OIL, OIL FILTER PACKAGES</option>
      

       <option value="BUSNESSLNK:2005-09-01">BUSINESSLINK / SMALL BUSINESS PLANS</option></select>

如何让 selenium 从此列表中选择一个选项?这是我第一次真正使用硒。

编辑:我目前正在尝试此代码:

driver.find_element_by_id("//select//*[@id='pgmSelectList']/option[text()='MAXCARE510:2009-10-01']").click()

我收到此错误:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="//select//*[@id='pgmSelectList']/option[text()='MAXCARE510:2009-10-01']"]"}
(Session info: chrome=86.0.4240.75)

【问题讨论】:

    标签: html python-3.x selenium


    【解决方案1】:

    您可以使用 Select 类来完成这项工作,

    from selenium.webdriver.support.ui import Select
    
    #Click on the drop down list to enable the options under it.
    driver.find_element_by_id("pgmSelectList").click()
    myDDList = Select(driver.find_element_by_id("pgmSelectList"))
    
    #Pass the value to select
    myDDList.select_by_value("USDCOMMPLN:2016-09-01")
    
    #select by visible text
    myDDList.select_by_visible_text("USED VEHICLE COMMERCIAL PLANS")
    

    【讨论】:

    • 我尝试在我的代码中实现这一点,在 driver.find_element_by_id('pgmSelectList').click() 行中我收到一条错误消息,显示第 87 行,在 select_by_value raise NoSuchElementException("Cannot定位具有值的选项:%s" % 值)selenium.common.exceptions.NoSuchElementException:消息:无法定位具有值的选项:USDCOMMPLN
    • 这就是解决方案,我只是愚蠢,并没有费心检查“二手车商业计划”在这种情况下是否真的是一个可选选项。
    • 现在正确更新了值,该方法应该可以工作。
    猜你喜欢
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    相关资源
    最近更新 更多