Селен: элемент, с которым невозможно взаимодействовать

#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 : обновил код в конце