硒:元素不可交互

时间:2021-05-25 07:36:04

标签: 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>&nbsp; Admin</a>

<i _ngcontent-sun-c24="" class="bi bi-people" style="font-size: 1.3rem;"></i> 

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

而不是这个:

navbar_element = browser.find_element_by_xpath("//a")

使用这个

navbar_element = browser.find_elements_by_xpath("//a")

find_element 将返回单个网络元素,而 find_elements 将返回 web elements

列表

您正在使用 navbar_element[0].click() 如果存储在列表中,它将点击第一个网络元素。

或者像这样迭代一个列表:

for link in navbar_element: 
    ActionChains(driver).move_to_element(link).click().perform()