元素的定位是自动化测试的核心, 要想操作一个对象, 首先应该识别这个对象. 一个对象就是像一个人一样, 她们会有各种的特征, 我们可以通过一个人的身份证号, 姓名等找到这个人. 那么对象也有类似的属性, 我们可以通过这个属性找到这个对象.
webdriver提供了一系列的对象定位方法, 常用的有以下几种:
- id
- name
- tag name
- class name
- css
- XPath
- link text
- partial link text
id和name
id和name是我们最常用的定位方式, 因为大多数空间都有这两个属性, 而且在对控件的id和name命名时一般使其有意义也会取不同的名字, 通过这两个属性定位一个属性变得比较容易
通过前端工具, 例如Chrome的F12, 找到了百度输入框的属性信息:
<input id = "kw" class = "s_ipt" type = "text" maxlength = "100" name = "wd" autocomplete = "off">
id = “kw” 通过**find_element_by_id(“kw”)函数就是捕获到百度输入框
name = “kd” 通过find_element_by_name(“wd”)**函数也同样可以捕获百度输入框
tag name和class name
从上面的百度输入框中的属性信息中, 我们可以看到, 不单单只有id和name属性, 比如class和tag name
- input就是一个标签的名字, 可以通过**find_element_by_tag_name(“input”)**函数来定位
- class = “s_ipt”, 通过**find_element_by_class_name(“s_ipt”)**函数捕获百度输入框
CSS定位
CSS使用选择器来为页面元素绑定属性, 这些选择器可以倍selenium用作另外的定位策略
CSS可以灵活的选择控件的任意属性find_element_by_css_selector()函数
CSS的获取可以用chrome的F12开发者模式中的element-右键-copy selector来获取
XPath定位
XPath是一种在XML文档中定位元素的语言. 因为HTML可以看作XML的一种实现, 所以selenium用户可以是使用这种强大的语言在web应用中定位元素
XPath扩展了上面id和name定位方式, 提供了很多种可能性
find_element_by_xpath()
XPath的获取可以用chrome的F12开发者模式中的element-右键-copy selector来获取
link text定位
这种方法主要是用来定位文本链接的, 比如百度首页上面有"新闻","地图"等, 以定位"新闻"这个链接元素为例
# coding = utf-8
from time import webdriver
from selenium import webdriver
# 驱动文件路径
driverfile_path = ****(chrome的路径)
# 启动浏览器
driver = webdriver.Chrome(executable_path = driverfile_path)
# 打开百度首页
driver.get(r'https://www.baidu.com/')
# 通过link定位"新闻"这个链接并点击
driver.find_element_by_link_text("新闻").click()
# 等待5s
sleep(5)
# 退出
driver.quit()
partial link text定位
通过部分链接定位, 有时候超链接的文本很长很长, 如果全部输入, 既麻烦又不美观, 这时候就可以只截取部分字符串, 用这种方法模糊匹配
用这种方法来定位百度首页的"新闻超链接", 就是把上面代码中的定位代码换为driver.find_element_by_partial_link_text(‘闻’).clock()