意外的TagNameException:Select仅适用于<Select>元素,而不适用于使用Selenium和Python选择下拉值时出现的“<form>”错误

2024-05-20 13:16:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用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>"

是否有其他解决方案可以使用其他可靠的解决方案测试此案例


Tags: nodivformidforvalueatdselect
1条回答
网友
1楼 · 发布于 2024-05-20 13:16:49

你离得够近了。但是,要通过find_element_by_id('did_atd_provide_pnc')标识的第一个元素是<form>标记,其中所需的元素是<select>标记

因此,Select()抛出<form>元素的错误如下:

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

解决方案

要选择文本为No<option>,需要为element_to_be_clickable()引入WebDriverWait,并且可以使用以下基于Locator Strategies

  • 使用xpath和select_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")
    
  • 使用xpathselect_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
    

参考资料

您可以在以下内容中找到一些相关的详细讨论:

相关问题 更多 >