![](/img/trans.png)
[英]How to click on li element of a dropdown list using Selenium in Python^
[英]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.