【问题标题】:UnexpectedTagNameException: Message: Select only works on <select> elements, not on <li>error selecting li element from a Dropdown using SeleniumUnexpectedTagNameException:消息:选择仅适用于 <select> 元素,不适用于 <li>使用 Selenium 从下拉列表中选择 li 元素时出错
【发布时间】:2020-10-18 12:07:23
【问题描述】:

我希望点击新测试。 HTML 代码看起来像这样。 我是新来的,开始学习使用 selenium-python 的自动化。

<li id="testing">

<ul class="dd">
    <li><a href="javascript:toolsPopup('/abc/xyz/text.html');"><span>New Test</span></a></li>
    <li><a href="javascript:toolsPopup('/abc/xyz/list.html');"><span>Test List</span></a></li>
</ul>
</li>

我正在尝试使用的代码

element=driver.find_element_by_id('testing')
drp=Select(element)
drp.select_by_visible_text('New Test')

但得到错误

selenium.common.exceptions.UnexpectedTagNameException: Message: Select only works on <select> elements, not on <li> 

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: python-3.x selenium xpath drop-down-menu css-selectors


    【解决方案1】:

    Select 方法仅适用于具有 HTML 标记选择的下拉菜单。 在您的情况下,您不能使用选择方法,只需为要从下拉列表中检测的元素编写定位器(XPath、CSS 或其他)。

    在您的情况下,您想要的元素的 XPath 应该是:

    //li[text()='New Test']
    

    【讨论】:

    • 感谢您的建议 @Norayr,但是如果我尝试 driver.find_element_by_xpath('/html/body/form/div[3]/div[2]/ul/li[1]/ul/li[5]/ul/li[1]/a').click() 我会收到错误消息:selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable 对此有何建议?
    • 是的,这是与第一个问题无关的另一个问题,现在您应该等待元素可点击,然后执行点击。 wait.until(EC.element_to_be_clickable(By.xpath, "your_xpath")).click()
    • 在执行 click() 动词之前我已经有一个 time.sleep(10) 了。仍然收到错误。不知道为什么
    • 尝试使用操作或使用 JSExecutor
    【解决方案2】:

    作为 New Test 文本的下拉元素不在 Select 节点中,您不能使用 Select 类。要选择&lt;option&gt;,文本为New Test,您需要为element_to_be_clickable() 诱导WebDriverWait,您可以使用以下基于Locator Strategies

    • 使用CSS_SELECTOR

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "li#testing > ul.dd li > a[href*='/abc/xyz/text.html'] > span"))).click()
      
    • 使用XPATH

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//li[@id='testing']/ul[@class='dd']//li/a/span[text()='New Test']"))).click()
      
    • 注意:您必须添加以下导入:

      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
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 2014-02-14
      相关资源
      最近更新 更多