前言
本章主要详细讲述WebDriver元素定位
注意:所有方法都基于fireFox浏览器
一、WebDriver 元素定位方式(8种)
- id
- name
- class_name
- tag_name
- link_text
- partial_link_text
- Xpath
- Css
1.id元素定位
- HTML规定id属性在整个HTML文档中必须是唯一的,id定位就是通过元素的id属性来定位元素;前提:元素有id属性
1)id定位方法:find_element_by_id()
2)示例:在百度页面查找"淘宝网"进行搜索
# 导入selenium
from selenium import webdriver
from time import sleep
# 实例化浏览器
driver = webdriver.Firefox()
#打开百度页面
driver.get("http://www.baidu.com")
#通过find_element_by_id()方法定位元素
driver.find_element_by_id("kw").send_keys("淘宝网")
#点击百度一下按钮
driver.find_element_by_id("su").click()
sleep(3)
driver.quit()
2.name元素定位
1)name定位方法:find_element_by_name()
2)name定位实现:参考id元素定位步骤(只需要把方法更改了并传入name属性值)
3.class_name元素定位
1)class_name定位方法:find_element_by_class_name()
2)class_name定位实现:参考id元素定位步骤(只需要把方法更改并传入class属性值)
4.tag_name定位(一般不使用)
1)tag_name定位方法:find_element_by_tag_name()
返回:符合条件的第一个标签
2)tag_name定位实现:参考id元素定位步骤
5.link_text定位
1)link_text定位方法:find_element_by_link_text()
注意:需要传入a标签全部文本,即完全匹配,否则定位不成功
6.partial_link_text定位
- partial_link_text定位是对link_text定位的补充,partial_like_text为模糊匹配;link_text
全部匹配
1)partial_link_text定位方法:find_element_by_partial_link_text()
2)需要传入a标签局部文本-能表达唯一性
二、重点讲解Xpath和Css定位
- 首先为什么要学习Xpath、CSS定位?
- 在实际项目中标签没有id、name、class属性
- id、name、class属性值为动态获取,随着刷新或加载而变化
1.Xpath
- 概念
XPath即为XML Path 的简称,它是一种用来确定XML文档中某部分位置的语言。
HTML可以看做是XML的一种实现,所以Selenium用户可以使用这种强大的语言在Web应用中定位元素。
提示:Xpath为强大的语言,那是因为它有非常灵活定位策略;
- Xpath定位策略(方式)
- 路径-定位
1). 绝对路径
2). 相对路径 - 利用元素属性-定位
- 层级与属性结合-定位
- 属性与逻辑结合-定位
Xpath定位 方法:driver.find_element_by_xpath()
1.路径定位(绝对路径、相对路径)
-
绝对路径:从最外层元素到指定元素之间所有经过元素层级路径 ;如:/html/body/div/p[2]
注意:绝对路径以/开始 -
相对路径:从第一个符合条件元素开始(一般配合属性来区分);如://input[@id=‘userA’]
注意:相对路径以//开始
2.利用元素属性
快速定位元素,利用元素唯一属性;
示例://*[@id=‘userA’]
3 层级与属性结合
要找的元素没有属性,但是它的父级有;
示例://*[@id=‘p1’]/input
4 属性与逻辑结合
解决元素之间个相同属性重名问题
示例://*[@id=‘telA’ and @class=‘telA’]
5 Xpath-延伸
//*[text()=“xxx”] :文本内容是xxx的元素
//*[starts-with(@attribute,‘xxx’)] :属性以xxx开头的元素
//*[contains(@attribute,‘Sxxx’)] :属性中含有xxx的元素
2.CSS定位(在selenium中极力推荐CSS定位,因为它比XPath定位速度要快)
- 概念
CSS(Cascading Style Sheets)是一种语言,它用来描述HTML和XML的元素显示样式;在CSS语言中有CSS选择器(不同的策略选择元素),在Selenium中也可以使用这种选择器;
- CSS定位常用策略 (方式)
- id选择器
- class选择器
- 元素选择器
- 属性选择器
- 层级选择器
CSS定位 方法:driver.find_element_by_css_selector()
1.id选择器
说明:根据元素id属性来选择
格式:#id 如:#userA <选择id属性值为userA的所有元素>
2.class选择器
说明:根据元素class属性来选择
格式:.class 如:.telA <选择class属性值为telA的所有元素>
3.元素选择器
说明:根据元素的标签名选择
格式:element 如:input <选择所有input元素>
4.属性选择器
说明:根据元素的属性名和值来选择
格式:[attribute=value] 如:[type=“password”] <选择所有type属性值为password的值>
5.层级选择器
说明:根据元素的父子关系来选择
格式:element>element 如:p>input <返回所有p元素下所有的input元素>
提示:> 可以用空格代替 如:p input 或者 p [type=‘password’]
6. CSS延伸
1.input[type^=‘p’] 说明:type属性以p字母开头的元素
2.input[type$=‘d’] 说明:type属性以d字母结束的元素
3.input[type*=‘w’] 说明:type属性包含w字母的元素
三、总结
- CSS总结
- XPath与CSS类似功能对比