#python #selenium #automation
Вопрос:
Я разработал приложение с использованием Angular, Node.js/Express.js и MySQL. В приложении есть страница входа в систему, которая отображается, когда любой пользователь переходит по ссылке. После входа в систему пользователь переходит на домашнюю страницу с множеством других страниц, которые отображаются на панели навигации. Я пытаюсь выполнить автоматизированный тест приложения, и я получаю эту ошибку, когда пытаюсь заставить свой автоматический тест щелкнуть по одной из ссылок на панели навигации.
TypeError: 'WebElement' object is not subscriptable
После того, как вы попробовали разные вещи, ошибка все еще не устранена. В итоге я получил ошибку Message: element not interactable
Я нашел элемент с помощью консоли в Chrome, и он также доступен для клика, когда я выполняю действие щелчка в консоли $x("//a")[1].click()
или $$("[class = 'navbar-nav ml-auto'] li a")[1].click()
, но когда я запускаю скрипт в selenium, он выдает ошибку. Кто-нибудь может сказать мне, как я могу сделать элемент навигационной панели кликабельным в selenium?
Вот мой код:
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('http://name-of-the-local-server:3000')
browser.implicitly_wait(3);
email_element = browser.find_element_by_css_selector("input[name = 'usermail']")
password_element = browser.find_element_by_css_selector("input[name = 'passcode']")
submit_btn_element = browser.find_element_by_css_selector("button[name = 'loginButton']")
email_element.send_keys("someone@example.com")
password_element.send_keys("pass123")
submit_btn_element.click()
#executes perfectly until here
navbar_element = browser.find_elements_by_css_selector("[class = 'navbar-nav ml-auto'] li a")
navbar_element[1].click()
ИЗМЕНИТЬ: Я добавил немного HTML-кода, который я хочу щелкнуть, так как по умолчанию он загружает домашнюю страницу
<a _ngcontent-imt-c24="" routerlinkactive="active" routerlink="/admin"
class="nav-link" href="/admin"><i _ngcontent-imt-c24="" class="bi bi-people"
style="font-size: 1.3rem;"></i>amp;nbsp; Admin</a>
<i _ngcontent-sun-c24="" class="bi bi-people" style="font-size: 1.3rem;"></i>
Любая помощь будет признательна. Спасибо!
Комментарии:
1. Пожалуйста, включите полную обратную трассировку ошибок.
2. Это означает, что вы прикрепили индекс к веб-элементу, который не поддерживается.
Ответ №1:
Вместо этого :
navbar_element = browser.find_element_by_xpath("//a")
используйте это
navbar_element = browser.find_elements_by_xpath("//a")
find_element
вернет один веб-элемент, где as find_elements
вернет список web elements
Вы используете navbar_element[0].click()
, если сохранено в списке, он нажмет на первый веб — элемент.
или повторите список, подобный этому :
for link in navbar_element:
ActionChains(driver).move_to_element(link).click().perform()
Комментарии:
1. это все еще не работает. Я получаю ошибку
Message: element not interactable
2. @node_modules : Можете ли вы поделиться URL-адресом, если он общедоступен ?
3. извините, это не для публики.
4. Да, я изменил это на первый индекс. Моя опечатка.
5. @node_modules : обновил код в конце