【问题标题】:UnexpectedTagNameException: Select only works on <select> elements, not on "<form>" error selecting a drop-down value using Selenium and PythonUnexpectedTagNameException: Select 仅适用于 <select> 元素,不适用于“<form>”错误使用 Selenium 和 Python 选择下拉值
【发布时间】:2020-11-26 19:02:58
【问题描述】:

我正在尝试使用 Python 从 Selenium 的下拉列表中选择一个选项

<div class="form-group mt-2 mb-3 p-3">
                            <form id="did_atd_provide_pnc">
                                <fieldset>
                                    <label for="did_atd_provide_pnc">Did ATD Consultants provide a Plan & Cost review for
                                        this project*?</label>
                                    <select class="form-control form-control-sm required-field atd_provided_dropdown" id="did_atd_provide_pnc"
                                            name="did_atd_provide_pnc" data-error-name="Did ATD Provide P&C">
                                        <option value="">-----</option>
                                        <option value="Yes">Yes</option>
                                        <option value="No">No</option>
                                    </select>
                                </fieldset>
                            </form>
                        </div>

我正在写这段代码

select = Select(driver.find_element_by_id('did_atd_provide_pnc'))
select.select_by_visible_text('No')

但是我收到了这个错误

UnexpectedTagNameException: Select only works on <select> elements, not on "<form>"

是否有任何其他解决方案我可以用任何其他可靠的解决方案来测试这个案例?

【问题讨论】:

    标签: python selenium selenium-webdriver xpath webdriverwait


    【解决方案1】:

    你已经够近了。但是,通过find_element_by_id('did_atd_provide_pnc') 识别的第一个元素是&lt;form&gt; 标签,而您想要的元素是&lt;select&gt; 标签。

    因此,Select() 引发错误,&lt;form&gt; 元素为:

    UnexpectedTagNameException: Select only works on <select> elements, not on "<form>"
    

    解决方案

    要选择&lt;option&gt;,文本为No,您需要为element_to_be_clickable() 诱导WebDriverWait,您可以使用以下基于Locator Strategies

    • 使用 xpathselect_by_visible_text():

      Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='did_atd_provide_pnc' and @name='did_atd_provide_pnc']")))).select_by_visible_text("No")
      
    • 使用 xpath select_by_value():

      Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='did_atd_provide_pnc' and @name='did_atd_provide_pnc']")))).select_by_value("No")
      
    • 注意:您必须添加以下导入:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      

    参考

    您可以在以下位置找到一些相关的详细讨论:

    【讨论】:

      猜你喜欢
      • 2020-10-30
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2012-05-10
      相关资源
      最近更新 更多