webDriver定位元素
一、八大定位方法
webdriver提供了8种元素定位的方法,在python中,对应的方法如下:
- id定位 --> find_element_by_id()
- name定位 --> find_element_by_name()
- tag定位 --> find_element_by_tag_name()
- class定位 --> find_element_by_class_name()
- link_text --> find_element_by_link_text()
- partial link定位 --> find_element_by_partial_link_text()
- XPATH定位 --> find_element_by_xpath()
- CSS_selector定位 --> find_element_by_css_selector()
二、页面元素、标签
以百度首页搜索框代码为例
2.1 id定位
HTML归档,id必须是惟一的。(身份证)
输入框:
find_element_by_id("kw")
百度搜索按钮
find_element_by_id("su")
2.2 name定位
HTML规定,name用来指导元素名称。(姓名)
输入框:
find_element_by_name("wd")
2.3 class定位
HTML规定,class用来指定元素类名。(身份证、姓名)
输入框:
find_element_by_class_name("s_ipt")
百度搜索按钮
find_element_by_class_name("btn self-btn bg s_btn")
2.4 tag定位
HTML通过tag来定义不同页面的元素。一般通过tag_name来定位。
输入框:
find_element_by_tag_name("input")
百度搜索按钮
find_element_by_tag_name("input")
2.5 link定位
link专门用来定位文本链接。通过元素标签直接的文字信息来定位元素。
find_element_by_link_text("新闻")
find_element_by_link_text("贴吧")
2.6 partial link定位
partial link定位是对link定位的一种补充,有些文字链接比较长,这个时候我们可以取文字链接的部分文字进行定位,只要这部分文字可以唯一地标识这个链接。
find_element_by_partial_link_text("部分文字")
2.7 XPath定位
在XML文档中,XPath是一种定位元素的语言。而HTML作为XML的一种实现,所以webDriver提供了这种在web应用中的定位元素方法。
1、绝对路径定位
XPath有多种定位策略,最简单直观的就是写出元素的绝对路径。(人一定存在于一个地理位置)
输入框:
find_element_by_xpath("html/body/div/div[2]/div/div/div/from/span/input")
百度搜索:
find_element_by_xpath("html/body/div/div[2]/div/div/div/from/span[2]/input")
div[2]、span[2] 标签出现的顺序。
2、利用元素属性定位
通过标签来定位,//input 表示当前页面的某个input标签,[@id='kw'] 表示这个元素的id值是kw。
输入框:
find_element_by_xpath("//input[@id='kw']")
百度搜索:
find_element_by_xpath("//input[@id='su']")
通过name 和 class来定位,如果不想指定标签名,可以使用星号(*)代替。
输入框:
find_element_by_xpath("//*[@name='wd']")
find_element_by_xpath("//input[@class='s_ipt']")
XPath不局限与id、name和class,元素的任意属性都可以使用,只要它能唯一标识一个元素。
输入框:
find_element_by_xpath("//input[@maxlength='100']")
find_element_by_xpath("//*[@autocomplete='off']")
3、层级与属性结合
如果一个元素本身没有可以唯一标识这个元素的属性值,那么我们可以查找其上一级元素。如果它的上一级元素有可以唯一标识属性的值,就可以拿来使用。(根据父亲找到儿子)
输入框:
find_element_by_xpath("//span[@class='bg s_ipt_wr quickdelete-wrap']/input")
span[@class='bg s_ipt_wr quickdelete-wrap'] 通过class定位到父元素。如果父元素没有可利用的属性,可以继续往上找。
4、使用逻辑运算符
如果一个属性不能唯一区分一个元素,那么我们可以使用逻辑运算符(and)来连接定位。
输入框:
find_element_by_xpath("//*[@id='kw' and @name='wd']")
5、使用 contains 方法
contains方法用于匹配一个属性中包含的字符串。
输入框:
find_element_by_xpath("//span[contains(@class,'s_ipt_wr')]/input")
6、使用 text() 方法
text() 方法用于匹配显示文本信息。contains可以与text() 配合使用。
新闻:
find_element_by_xpath("//*[contains(text(), '新')]")
2.8 CSS定位
CSS是一种语言,用来描述HTML和XML文档的表现。CSS使用选择器未页面元素绑定属性。
CSS选择器的常见语法如下:

1、通过class定位
点号(.)表示通过class来定位元素
输入框:
find_element_by_css_selector(".s_ipt")
百度搜索:
find_element_by_css_selector(".s_btn")
2、通过id定位
井号(#)表示通过id来定位元素
输入框:
find_element_by_css_selector("#kw")
百度搜索:
find_element_by_css_selector("#su")
3、通过标签名定位
在CSS中,可以直接使用标签名定位元素。
输入框:
find_element_by_css_selector("input")
4、通过标签层级关系定位
在父标签中查找子标签。
输入框:
find_element_css_selector("span>input")
5、通过属性定位
在CSS中可以使用唯一标识属性定位元素。对属性值来说,引号可加、可不加。注意和整个字符串的引号进行区分。
输入框:
find_element_css_selector("[name='kw']")
find_element_css_selector("[autocomplete=off]")
6、组合定位
组合定位加强唯一性。
输入框:
find_element_by_css_selector("[form.fm>span>input.s_ipt]")
7、更多定位用法
查找class属性包含“s_ipt_wr”字符串的元素
find_element_by_css_selector("[class*=s_ipt_wr]")
查找class属性以“bg”字符串开头的元素
find_element_by_css_selector("[class^=bg]")
查找class属性以“wrap”字符串结尾的元素
find_element_by_css_selector("[class$=wrap]")
查找form标签下面第2个input标签的元素
find_element_by_css_selector("form > input:nth-child(2)")
更多方法参考w3school

浙公网安备 33010602011771号