如何使用 Selenium 单击后代 li 元素?

How to click on a descendant li element with Selenium?

我正在使用 selenium 进行自动化,我点击了一个下拉菜单,有 3 个选项,它们在一个 ul 列表中,每个选项都是一个 li 角色。我能够找到它们并且 selenium 可以看到它们但是 selenium 不能点击它们,它说它不可交互。

这是与之交互的代码。

browser.find_element(by=By.XPATH, value='//*[@id="ext4-ext-gen1136"]').click()

browser.find_element(by=By.CSS_SELECTOR, value='#boundlist-1078-listEl > ul > li:nth-child(3)').click()

(通常我对所有内容都使用 XPATH,但我想我会尝试 CSS 选择器)

这是HTML代码

<ul class="x4-list-plain"><li role="option" unselectable="on" class="x4-boundlist-item x4-boundlist-selected">Show Latest Event</li><li role="option" unselectable="on" class="x4-boundlist-item">Show All Events and Traces</li><li role="option" unselectable="on" class="x4-boundlist-item">Show All Events</li></ul>
       <li role="option" unselectable="on" class="x4-boundlist-item x4-boundlist-selected">Show 
        Latest Event</li>
       <li role="option" unselectable="on" class="x4-boundlist-item">Show All Events and 
        Traces</li>
       <li role="option" unselectable="on" class="x4-boundlist-item">Show All Events</li>

我希望能够select显示所有事件和痕迹。

根据 id 属性的值进行代码试验,即 ext4-ext-gen1136 看来该元素是一个动态元素。


要单击文本为 显示所有事件<li> 元素,您需要诱导 WebDriverWait for the and you can use either of the following :

  • 使用CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "ul.x4-list-plain li:nth-child(3)"))).click()
    
  • 使用 XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='x4-list-plain']//li[@class='x4-boundlist-item' and text()='Show All Events']"))).click()
    
  • 注意:您必须添加以下导入:

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

我想通了,我必须打开下拉菜单才能点击它们,但是当 selenium 点击它时下拉菜单会立即关闭,我所要做的就是让 selenium 点击它两次并修复了问题。