定位元素后click()报错

定位元素用.click()报错,在网上查了问题原因,有的说是页面没有加载成功就点击了,有的说元素会变化所以导致失败,加了sleep也依然报错,不是每一个脚本里的click都报错,最后用ActionChains来实现解决了click报错的问题
def test_form(self):
self.driver.get(“https://testerhome.com/account/sign_in”)
self.driver.find_element_by_id(“user_login”).send_keys(“123”)
self.driver.find_element_by_id(“user_password”).send_keys(“password”)
#报错
# self.driver.find_element_by_id(’//*[@id=“user_remember_me”]’).click()
#成功
ele = self.driver.find_element_by_id(“user_remember_me”)
webdriver.ActionChains(self.driver).move_to_element(ele).click(ele).perform()

  • 可能这个元素本身并不支持点击,而是它的子元素或者父元素支持点击,并且可点击区域覆盖到了该元素,所以从页面上的效果是可以点击生效,但是通过元素的click事件并不能触发其它元素的点击事件,导致报错
  • 也可能这个元素的点击是一个js的事件,事件不是通过普通的点击来触发的所以导致click方法没能触发对应的js事件,这个具体还是要分析一下页面的源码,看一下具体情况。

我用的就是西西老师演示的地址,代码都是一样的,没有差别呢

  • 你在 find_element_by_id方法中传入的参数不是一个id 而是一个xpath表达式
  • 可以把调用的方法换成 find_element_by_xpath
  • 或者把传入的参数换成user_remember_me

另外,提问贴请发到答疑区,保持论坛秩序才能让问题更快更好的获得解答

换成xpath表达式也会报错。
使用下面这个会成功
ele = self.driver.find_element_by_id(“user_remember_me”)
webdriver.ActionChains(self.driver).move_to_element(ele).click(ele).perform()

报错是报了什么错呢?截图看一下
两种方式都可以实现相同的结果的

find_element_by_id都是报错的,xpath是没有报错,但是没有给这个选框打钩



  • 看了一下页面的源码,页面中加了一个伪元素遮挡了原本的input元素,所以导致click事件去点击input元素的时候报错了
  • 这种情况使用鼠标事件来操作就没有问题
  • 或者也可以使用js或者直接定位到遮盖的伪元素上进行点击操作,比如使用

    也可以完成点击操作

该问题可以有以下几种解决方案: