selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id‘

2022-12-01 23:30:03 浏览数 (1)

欢迎关注公众号:TestingStudio,学习更多测试开发必备技能

pycharm新建了一个项目,用于做web自动化测试,直接安装了selenium这个库,发现之前写的Selenium元素定位的代码运行之后会报错,发现是Selenium更新到新版本(4.x版本)后,以前的一些常用的代码的语法发生了改变,当然如果没有更新过或是下载最新版本的Selenium是不受到影响的,还可以使用以前的写法。接下来就是讨论有关于新版本后Selenium定位元素代码的新语法,大家后面别再踩这个坑了。

Selenium3版本的元素定位写法

代码语言:txt复制
inputTag = driver.find_element_by_id("value")  # 利用ID定位

inputTags = driver.find_element_by_class_name("value")  # 利用类名定位

inputTag = driver.find_element_by_name("value")  # 利用name属性定位

inputTag = driver.find_element_by_tag_name("value")  # 利用标签名定位

inputTag = driver.find_element_by_xpath("value")  # 利用xpath定位

inputTag = driver.find_element_by_css_selector("value")  # 利用CSS选择器定位

在版本没有更新前我们使用的都是driver.findelement_by方法名(”value”),方法名就是by_id、by_class_name、by_name等等,而"value",则是传入的值,以百度搜索按钮为例,浏览器开发者工具可看其HTML源代码中属性id=”su“,以旧版本的写法使用id值查找搜索框应该是:

代码语言:txt复制
searchTag = driver.find_element_by_id("su")

在版本没有更新之前,通常情况下运行都是能够正确定位到对应的元素,但是Selenium经过版本升级之后,运行后会报错,以driver.find_element_by_id(“value”)为例(其他报错也是类似下面的报错信息),运行后会出现上面的错误。

4版本的Selenium已经不再支持上面的写法,我们需要导入其他方法,改变我们的元素定位写法:

引入By方法

代码语言:txt复制
from selenium.webdriver.common.by import By

新元素定位方法

代码语言:txt复制
 # searchTag = driver.find_element_by_id("value")  # 利用ID定位
 # 改为:
# searchTag = driver.find_element(By.ID, "value")

 # searchTag = driver.find_element_by_class_name("value")  # 利用类名定位
# 改为:
# searchTag = driver.find_element(By.CLASS_NAME, "value")

# searchTag = driver.find_element_by_name("value")  # 利用name属性定位
# 改为:
searchTag = driver.find_element(By.NAME, "value")

# searchTag = driver.find_element_by_tag_name("value")  # 利用标签名定位
# 改为:
searchTag = driver.find_element(By.TAG_NAME, "value")

# searchTag = driver.find_element_by_xpath("value")  # 利用xpath定位
# 改为:
searchTag = driver.find_element(By.XPATH, "value")

# searchTag = driver.find_element_by_css_selector("value")  # 利用CSS选择器定位
# 改为:
searchTag = driver.find_element(By.CSS_SELETOR, "value")

改完之后就正常了,不需要去降selenium的版本了。

0 人点赞