Selenium 提供了8个元素定位的API,可以分为三种:
1. 标签定位策略2. 属性定位策略
3. 通用定位策略
find_element 用来定位单个元素
find_elements 用来定位多个元素
1. 标签定位策略
LINK_TEXT :精确匹配
PARTIAL_LINK_TEXT :模糊匹配
1 driver.get("http://101.34.221.219:8010/") # 控制浏览器 2 el = driver.find_element(By.PARTIAL_LINK_TEXT, "登") # 定位元素 3 print(el.tag_name, el.text) # 打印元素的信息
2. 属性定位策略
ID NAME TAG_NAME CLASS_NAME
1 <input 2 id="search-input" 3 name="wd" 4 type="text" 5 placeholder="其实搜索很简单^_^ !" 6 value="" 7 autocomplete="off" 8 >
1 el = driver.find_element(By.TAG_NAME, "input") 2 print(el.tag_name, el.text) # 打印元素的信息 3 el = driver.find_element(By.ID, "search-input") 4 print(el.tag_name, el.text) # 打印元素的信息 5 el = driver.find_element(By.NAME, "wd") 6 print(el.tag_name, el.text) # 打印元素的信息
3. 通用定位策略
对于大部分的定位策略,其底层,是使用CSS或者XPath实现。
XPath 是一种查询语言,支持逻辑表达式和函数,可以实现复杂元素的动态定位,可以用于App自动化测试的定位。
1 //*[@id="search-input"] 2 /html/body/div[3]/div/div[3]/form/div/input 3 /html/body/div/../div
XPath 语法
/ (开头) :根路径
// :任一级
/ (在中间) :下一级
. :当前节点(同级)
[n] :序号 表示同级元素的序号
@ :属性 ,//input[@name="wd"]
XPath 函数
text : 精确匹配 $x("//*[text()='iphoneX新品发布了']")
contains :模糊匹配 $x("//*[contains(text(),'新品发')]")
starts-with:开头一致 $x("//*[starts-with(text(),'iphoneX新品')]")