selenium自动化测试过程中,经常会发现某一元素单击,很不稳定,有时候执行了点击没有反映。
以下总结解决方法:
selenium自带click方法,有的时候不好用,元素定位到了,但是就是点不上。
1. selenium自带的click()方法:
from selenium import webdriver
el = driver.find_element(By.ID,ID) # 找到元素
el.click() # 执行点击
缺陷:不稳定
2. 鼠标操作
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
el = driver.find_element(By.ID,ID) # 找到元素
ActionChains(driver).move_to_element(el).click().perform()
鼠标操作的局限于操作依然是模拟页面操作,如果存在元素遮挡无法显示的情况,无法使用
3.找到元素,之后用js注入单击 【常用】
有人可能会问,都找到元素了,直接element.click()不就好了。
这样是可以,但是本文的内容是,有一些不稳定。element.click(),有时定位到元素了,点击没生效。
element = driver.find_element(*loc)
driver.execute_script("arguments[0].click();",element)
JS直接运行不会存在遮罩的问题,健壮性是最好的。
补充:JS也有一个问题,使用JS点击,由于没有在页面真正的进行点击操作,触发不了按钮对应的JS脚本,可能导致系统无法按照预期效果运行。这种特殊情况下可使用其他点击操作代替
最大的问题是不会报错,有的时候Xpath写错了,使用JS运行点击不会报错,就是没有效果。
4.F12查一看,要点击的按钮,或连接,有没有οnclick=func();这样调用方法
如果有的话,可以直接用js调用方法名
driver.execute_script("func();”)