Python专题系列-web自动化:(三)web自动化测试selenium的八大元素定位

文章目录

  • 前言
  • 一、八大元素定位策略
    • 1.根据元素的ID属性进行定位
    • 2.根据元素的NAME属性进行定位
    • 3.根据元素的标签名TAG_NAME进行定位
    • 4.根据元素的class属性进行定位
    • 5.根据标签TEXT,定位A标签,必须要输入完整的text(精确匹配)
    • 6.根据标签TEXT,模糊定位A标签,可以输入部分的text(模糊匹配)
    • 7.CSS选择器(基本格式,详细见之后内容)
    • 8.XPATH选择器(基本格式,详细见之后内容)
  • 二、定位器
    • 1.find_element
    • 2.find_elements
  • 三、CSS选择器
    • 1.根据元素的ID选择器进行定位
    • 2.根据元素的CLASS选择器进行定位
    • 3.元素选择器
    • 4.属性选择器
    • 5.层次选择器
  • 四、XPATH选择器
    • 1.XPATH语法
    • 2.XPATH函数
  • 五、相对定位
    • 1.Xpath中的相对定位
    • 2.轴定位
    • 3.selenium4中的相对定位
  • 总结


前言

Python系列文章主要是记录自己学习成果及知识输出整合,提供一个温故而知新的场所。


一、八大元素定位策略

在WebDriver中提供8种不同定位策略

iupt标签
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

a标签
<a href="http://news.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">新闻a>
以百度搜索框为例:

1.根据元素的ID属性进行定位

ID具有唯一性,所以定位效率非常快

driver.find_element(By.ID, 'kw')

2.根据元素的NAME属性进行定位

除了ID外,其他属性可能不是唯一性,所以可能会定位到多个元素

driver.find_element(By.NAME, 'wd')

3.根据元素的标签名TAG_NAME进行定位

driver.find_element(By.TAG_NAME, 'input')

4.根据元素的class属性进行定位

不可以使用复合类名,例:submit am-btn,需去掉一个类名如:submit

driver.find_element(By.CLASS_NAME, 's_ipt')

5.根据标签TEXT,定位A标签,必须要输入完整的text(精确匹配)

driver.find_element(By.LINK_TEXT, '新闻')

6.根据标签TEXT,模糊定位A标签,可以输入部分的text(模糊匹配)

driver.find_element(By.PARTIAL_LINK_TEXT, '闻')

7.CSS选择器(基本格式,详细见之后内容)

driver.find_element(By.CSS_SELECTOR, '#kw')

8.XPATH选择器(基本格式,详细见之后内容)

driver.find_element(By.XPATH, '//*[@id="kw"]')

二、定位器

1.find_element

返回单个元素

# ID具有唯一性,如果可以通过ID定位元素就可以使用
driver.find_element(By.ID, 'kw')
# 如果使用其他属性,就需要保证其他属性的唯一性,如
driver.find_element(By.NAME, 'wd')

2.find_elements

返回多个元素,通过列表的形式返回

# 如果元素属性不唯一,或者想要使用同级别的元素,就可以使用find_elements
# 如 input标签种type值可能在一个网页存在多个
<input type="hidden" name="rsv_spt" value="1">
<input type="hidden" name="rsv_iqid" value="0xc8af5ebe000b8fc8">
# 这种情况可以使用name属性值来进行定位,这里因为name的唯一性就可以使用
find_element
# 如果想使用type定位第一个,只能使用find_elements
elements = driver.find_elements(By.XPATH, '//input[@type="hidden"]')
# 通过列表下标的方式,选择想要的元素进行操作
elements[0].click

三、CSS选择器

1.根据元素的ID选择器进行定位

#ID(id选择器通过#加id值进行定位)

driver.find_element(By.CSS_SELECTOR, '#kw')

2.根据元素的CLASS选择器进行定位

.class(class选择器通过.加class值进行定位)

driver.find_element(By.CSS_SELECTOR, '.s_ipt')

3.元素选择器

通过input、a、span等元素标签进行定位

driver.find_element(By.CSS_SELECTOR, 'input')

4.属性选择器

通过标签里面的具体属性值定位

driver.find_element(By.CSS_SELECTOR, "input[id='kw']")

5.层次选择器

通过元素路径来定位

driver.find_element(By.CSS_SELECTOR,'form span input')

四、XPATH选择器

XPATH是’XML路径查询语言’
XPATH优势:

  • 支持逻辑表达式
  • 内置函数

1.XPATH语法

层级表示:

/html/body/div  (/ (开头)根路径;/ (中间)下一级; //任一级 )

属性表示:

//input[@id='kw']

位置表示(从1开始,没有-1):

//input/div[1]

元素表示:
直接写元素名

//input 或者 //*
*代表所有元素

2.XPATH函数

常用的函数
text:定位标签之间的文本(精确定位)

//div[text()='vvv']

contains:判断元素与给定字符串是否包含关系

//div[contains(@input,'vvv')]
//div[contains(text(),'vvv')]----标签之间包含文本内容

starts-with:以什么开头的元素(多用于动态元素定位)

//div[starts-with(@input,'vvv')]

ends-with:以什么结尾的元素

//div[ends-with(@input,'vvv')]

last:最后一个元素

//div[last()]

五、相对定位

1.Xpath中的相对定位

四字口诀:父子兄弟
相对路径 代表相对于当前节点的 单个节点(可向上找看,可向下找)
通过当前节点找到父级,再找到兄弟元素

//*[@id='v']/div/div/a (当前节点)
//*[@id='v']/div/div/a/../input..为父级/input是兄弟元素)

2.轴定位

代表相对于当前节点的 N个节点

轴名称 结果
following 自身之前的所有元素
preceding 自身之后的所有元素
ancestor 所有先辈(父、祖父等)
ancestor-or-self 所有先辈以及自身
parent 父节点
preceding-sibling 所有兄节点
self 自身
following-sibling 所有弟节点
child 所有子元素
descendant-or-self 所有后代元素以及当前节点本身
descendant 所有后代元素

例:

name = driver.find_element(By.XPATH, "//*[@id='v']/div/div/a")  # (当前节点)
name.find_element(By.XPATH, "ancestor::*[1]/input")  # (ancestor是找所有祖先的,[1]代表父级[2]代表祖父级以此类推)

3.selenium4中的相对定位

原理:通过JS代码,遍历附近所有元素的rect(坐标+大小),然后进行元素筛选定位
优势:根据元素实际展示效果进行定位,不关心具体层级
劣势:效率低,准确低,通用性差,很多时候无法按照预期工作

相对定位 作用
above 在指定元素上方进行搜索
below 在指定元素下方进行搜索
to_left_of 在指定元素左侧进行搜索
to_right_of 在指定元素右侧进行搜索
near 在指定元素附近(50px)进行搜索

例:

name = driver.find_element(By.XPATH, "//*[@id='v']/div/div/a")  #(当前节点)
n_name = driver.find_element(locate_with(By.TAG_NAME,'a').above(name))

总结

以上就是文章要表达的内容,本文介绍了web自动化测试selenium的八种元素定位策略,最主要还是CSS选择器和XPATH选择器:CSS选择器,通用性好,执行效率高,是selenium推荐的选择器;XPATH选择器,效率高,有很多的函数,用法灵活更精确。

你可能感兴趣的:(python,自动化)