簡體   English   中英

如何使用 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 Selector)

這是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>

我希望能夠選擇顯示所有事件和跟蹤。

根據id屬性(即ext4-ext-gen1136)的值,從您的代碼試驗來看,該元素似乎是一個動態元素。


要單擊帶有文本的<li>元素作為顯示所有事件,您需要為element_to_be_clickable()誘導WebDriverWait ,並且可以使用以下任一定位器策略

  • 使用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 單擊它兩次,從而解決了問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM