Я автоматизирую с помощью селена и достиг точки, когда я нажимаю раскрывающийся список, и есть 3 варианта, и они находятся в списке ul, и каждый вариант является ролью li. Я могу найти их, и селен может их видеть, но селен не может щелкнуть по ним, он говорит, что он не взаимодействует.
Вот код, который взаимодействует с ним.
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>
с текстом Показать все события, вам нужно вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать любой из следующих стратегии поиска:
Используя 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
Я понял это, мне нужно было открыть раскрывающийся список, чтобы щелкнуть по ним, но раскрывающийся список сразу закрывался, когда селен щелкал по нему, все, что мне нужно было сделать, это заставить селен дважды щелкнуть по нему, и это решило проблему.