1、id定位: find_element_by_id()
2、name定位: find_element_by_name()
3、class定位:find_element_by_class_name()
4、tag定位:find_element_by_tag_name()
5、link定位:find_element_by_link_text()
6、partial_link定位:find_element_by_partial_link_text()
7、xpath定位:find_element_by_xpath()
8、CSS定位:find_element_by_css_selector()
针对这些定位方式,我们一般的优先选择顺序:ID>Name>CSS>XPath,但前提是能够精确定位到索要的元素
原因:id和name不受html结构的影响,可直接定位到,维护成本较低,相对于name而言,同页面下id具有唯一性(一般情况),而name可能会重复使用。
tag定位主要针对一组元素进行定位,如:单选框/复选框,使用场景比较单一
css与xpath相比较而言,搜索更快,性能更好,但css在底层也会翻译成xpath。
原因:原因不详
个人理解
- xpath需要保证路径的完整性,而css不需要;
- xpath是xml文档查找节点的语法,类似于在系统中查找某个文件,需要按照所查元素的路径一层一层进行查找
- css 通过属性直接查找,
两者区别:
- CSS表达式更加简洁,
- css在chrom,火狐查找速度快一些,效率高一些,xpath在IE浏览器相对快一些(ie浏览器无论是css,xpath都比谷歌,火狐要慢)
- CSS不支持文本搜索,XPATH支持文本搜索text()
- xpath支持的函数特别多,CSS选择器支持的函数比较少,所以在复杂元素查找时候,xpath反而更加简洁,所以xpath功能更加强悍
一般情况下:当查找元素比较简单,用css没错,如果复杂,用xpath比较好
id定位:通控制台中的id属性进行定位,如id=“kw”
# coding = utf-8 from time import sleep from selenium import webdriver # 驱动文件路径 driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' # 启动浏览器 driver = webdriver.Chrome(executable_path=driverfile_path) # 打开百度首页 driver.get(r'https://www.baidu.com/') # 通过id定位搜索框,并输入selenium driver.find_element_by_id('kw').send_keys('selenium') # 等待5秒 sleep(5) # 退出 driver.quit()
name定位:通控制台中的id属性进行定位,如name="wd"
# coding = utf-8 from time import sleep from selenium import webdriver # 驱动文件路径 driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' # 启动浏览器 driver = webdriver.Chrome(executable_path=driverfile_path) # 打开百度首页 driver.get(r'https://www.baidu.com/') # 通过name定位搜索框,并输入selenium driver.find_element_by_name('wd').send_keys('selenium') # 等待5秒 sleep(5) # 退出 driver.quit()
name定位:通控制台中的class属性进行定位,如class="s_ipt"
# coding = utf-8 from time import sleep from selenium import webdriver # 驱动文件路径 driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' # 启动浏览器 driver = webdriver.Chrome(executable_path=driverfile_path) # 打开百度首页 driver.get(r'https://www.baidu.com/') # 通过class定位搜索框,并输入selenium driver.find_element_by_class_name('s_ipt').send_keys('selenium') # 等待5秒 sleep(5) # 退出 driver.quit()
tag定位: 每个元素其实就是一个tag,一个tag往往用来定义一类功能,我们查看百度首页的html代码,可以看到有很多div,input,a等tag,所以很难通过tag去区分不同的元素。基本上在我们工作中用不到这种定义方法,仅了解就行
# coding = utf-8 from time import sleep from selenium import webdriver # 驱动文件路径 driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' # 启动浏览器 driver = webdriver.Chrome(executable_path=driverfile_path) # 打开百度首页 driver.get(r'https://www.baidu.com/') # 通过tag定位搜索框,并输入selenium, 此处必报错 driver.find_element_by_tag_name('input').send_keys('selenium') # 等待5秒 sleep(5) # 退出 driver.quit()
link定位:此种方法是专门用来定位文本链接的,属性为连接的txt文本.定位百度中的“新闻”连接
# coding = utf-8 from time import sleep from selenium import webdriver # 驱动文件路径 driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' # 启动浏览器 driver = webdriver.Chrome(executable_path=driverfile_path) # 打开百度首页 driver.get(r'https://www.baidu.com/') # 通过link定位"新闻"这个链接并点击 driver.find_element_by_link_text('新闻').click() # 等待5秒 sleep(5) # 退出 driver.quit()
partial_link定位:针对连接为长文本的属性进行定位,比如定位“新闻”
# coding = utf-8 from time import sleep from selenium import webdriver # 驱动文件路径 driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' # 启动浏览器 driver = webdriver.Chrome(executable_path=driverfile_path) # 打开百度首页 driver.get(r'https://www.baidu.com/') # 通过partial_link定位"新闻"这个链接并点击 driver.find_element_by_partial_link_text('闻').click() # 等待5秒 sleep(5) # 退出 driver.quit()
xpath定位:
概念:
- xpath是什么?XML路径语言。用来在HTML/XML文档中查找信息的语言。
- xpath使用路径表达式来获取节点/节点集,和常规电脑文件路径类似。
- 绝对路径 / 和相对路径//:/从根节点开始;//相对路径(推荐用),相对于整个源码查找;
1.绝对路径定位:
从根路径开始写,直到所要查询的元素节点为止
2.相对路径定位:
//form//span//input表示:从索要查的元素进行反推,直到具有唯一性的节点开始写
3.元素索引定位:
//form//input[3]表示:form标签下的第三个input
4.节点唯一性的属性进行匹配定位
开头增加//*查找绝对路径下的任意属性,如://*[@id='wh'],标识根源素下任意一个id='wh'的元素,
而//后可直接跟标签,如//input,标识根路径下第一个input标签
我们可以通过反推的原理进行排查,找到所要查询元素的上层的唯一元素,利用开头加//*的方法,先找的这个上层元素,再通过/来进行逐级编写,如://*[@id='wh']/input[@id='txt'].如果id='wh'与input[@id='txt']中间有两个层级,我们需要在中间增加两个/*/*,才能保证路径的统一,如://*[@id='wh']/*/*/input[@id='txt']
2.节点部分属性匹配定位:
- contains来进行辅助定位
根目录下查找a标签中包含href属性且属性中包含logout的元素,如://a[contains(@href, ‘logout’)]
- starts-with来辅助定位
根目录下查找a标签下name属性以wd开头的元素,如://a[starts-with(@name,'wd')]
3.组合形式定位
不使用节点唯一性定位时,如://*[@id='form']/span[1]/input 表示:查找id属性为form的节点下第一个span节点下的input
# coding = utf-8 from time import sleep from selenium import webdriver # 驱动文件路径 driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' # 启动浏览器 driver = webdriver.Chrome(executable_path=driverfile_path) # 打开百度首页 driver.get(r'https://www.baidu.com/') # 通过xpath定位搜索框,并输入selenium driver.find_element_by_xpath("//*[@id='kw']").send_keys('selenium') # 等待5秒 sleep(5) # 退出 driver.quit()