Webdriver提供了八种基本元素定位的方法:
方法 | 用法 | 特性 |
---|---|---|
id | find_element_by_id() | 元素id具有唯一性 |
name | find_element_by_name() | 元素名称,可以不唯一,需要通过层级和属性结合或者二次定位 |
class name | find_element_by_class_name() | 元素类名,用法与id,name类似,通过class属性来定位元素 |
tag name | find_element_by_tag_name() | <form>,<span>,<input>等都是标签 |
link text | find_element_by_link_text() | 专门用来定位文本链接 |
partial link text | find_element_by_partial_link_text() | 取文本链接的部分进行定位,只要能唯一标识元素即可 |
xpath | find_element_by_xpath() | 基于XML层级结构关系来定位,此方式运用最普遍 |
css selector | find_element_by_css_selector() | 主要通过class属性和id属性进行定位 |
1)id定位元素
使用id定位元素虽然高效,但是在实际测试项目中能直接通过id来进行定位的元素比较少,以百度一下输入框为例,id=“kw”。
<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd"/>
id定位元素实例:
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com")
try:
driver.find_element_by_id("kw")
print ('test pass: ID found')
except Exception as e:
print ("Exception found", format(e))
driver.quit()
2)name定位元素
name这个属性值不是所有的元素都有,所以使用不普遍,但是如果有name,建议可以采用这个属性值进行定位。
<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd"/>
name定位元素实例:
driver.find_element_by_name("wd") # 百度一下输入框name = 'wd'
3)class name定位元素
<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd"/>
class name定位元素实例:
driver. find_element_by_class_name("s_ipt") # 百度一下输入框class name = 's_ipt'
4)tag name定位元素
图中红色标记部分的标签名称就是tag name,由图我们可以看到,我们的目标元素是百度一下输入框,也就是input这个tag name,但是由于tag name="input"的元素很多,并不能准确定位到百度一下输入框,所以我们只能扩大节点参照,选择上面的form来作为tag name,这也就是这种定位方式的弊端。
tag name定位元素实例:
driver.find_element_by_tag_name("form")
5)link text定位元素
网页中可以点击跳转的链接,上面的文字信息就是link text,例如百度一下页面新闻,学术等文字:
link text定位元素实例:
driver.find_element_by_link_text("学术") #定位的是link text="学术"的元素
6)partial link text定位元素
partial link text定位方式和link text类似,只是当链接文字过长,同时链接中部分文字就可唯一定位元素时,就可以使用partial link text方法来替代link text方法定位元素,这里就不过多的举例。
7)xpath定位元素
xpath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。对于xpath还在学习的过程中,主要是通过在火狐浏览器中安装firepath插件,可以快速获取网页元素的xpath表达式,具体步骤如下图所示,操作前需点击电脑的F12按钮进入firebug操作界面。
xpath定位元素实例:
driver.find_element_by_xpath(".//*[@id='kw']") #定位的是xpath表达式=".//*[@id='kw']"的元素
8)css selector定位元素
css selector定位元素需要对css比较熟,这种定位元素的方式比xpath表达式查找元素的速度要快,用css selector也可以定位到页面大多数的元素。
css selector定位元素实例:
driver.find_element_by_css_selector("#kw")#定位的是id="kw"的元素,用css语法中,id元素前面需要加#号
本章主要介绍了Webdriver定位元素的八种方法,其中最常用的就是后面两种xpath和css selector定位元素方式。需要注意的是:一定要掌握xpath或者css selector方法来定位元素,其他几种定位方法只需了解即可。