如何使用 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 点击它两次并修复了问题。
我正在使用 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
使用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 点击它两次并修复了问题。