selenium自动化测试入门 —— 层级定位与定位一组元素

一、层级定位(二次定位)

在实际测试过程中,一个页面可能有多个属性基本相同的元素,如果要定位到其中的一个,这时候需要用到层级定位。先定位其父元素,然后再通过父元素定位该元素。

示例:通过层级定位搜狗输入框

复制代码
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(r'https://www.sogou.com/')
form_element = driver.find_element_by_id('sf')  # 获取form表单元素
form_element.find_element_by_id('query').send_keys('selenium')  # 通过表单定位输入框
form_element.find_element_by_id('stb').click()  # 通过表单定位搜索按钮
time.sleep(3)
driver.quit()

如上代码,我们先定位到了form表单,然后通过表单定位下面的输入框与按钮。

注意:上面示例只通过两层定位到了元素,层级定位不一定定位两次,我们可以定位多次。

复制代码
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

二、定位一组元素

而当我们需要获取多个属性相同的对象,并且需要批量操作该对象时,就会使用find_elements定位一组元素。

创建以下html文件,文件名checkbox.html

复制代码
 <form class="form-horizontal">
   <div class="control-group">
       <label class="controllabel" for="China">中国人</label>
       <div class="controls">
           <input type="checkbox" id="China"/>
       </div>
   </div>
   <div class="control-group">
       <label class="controllabel" for="American">美国人</label>
       <div class="controls">
           <input type="checkbox" id="American"/>
       </div>
   </div>
   <div class="control-group">
       <label class="controllabel" for="German">德国人</label>
       <div class="controls">
           <input type="checkbox" id="German"/>
       </div>
   </div>
   <div class="button">
       <input type="submit" id="submit"/>
   </div>
</form>

示例:全选上面的多选框

复制代码
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.maximize_window()
driver.get(r'E:\xxx\checkbox.html') # 打开checkbox.html文件,使用绝对地址
checkboxs = driver.find_elements_by_xpath('//input[@type="checkbox"]')  # 获取批量的对象
for checkbox in checkboxs:  # 循环控制
   if not checkbox.is_selected():  # 判断多选框是否被选中
       checkbox.click()  # 单击
time.sleep(3)
driver.quit()

三、综合运用

当我们需要定位一组元素时,页面上相似的元素会很多,这时我们需要和层级一定一起使用。先定位到该组元素的父元素,然后通过父元素定位其子孙元素。

示例1:获取搜狗微信页面搜索热词的内容

复制代码
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(r'http://weixin.sogou.com/')
topele = driver.find_element_by_id('topwords')  # 搜索热词的父元素
tops = topele.find_elements_by_tag_name('a')  # 二次批量定位热词元素
for top in tops:  # 循环获取元素
   print(top.text)  # 打印文本内容
driver.quit()

UI自动化测试中对于表格的定位是个难点,怎么样快速获取表格数据,请看下面几个示例。

示例2:定位表格获取表头

复制代码
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(r'http://www.w3school.com.cn/cssref/css_selectors.asp')
# //table[@class="dataintable"]//tr[1]//th 获取表头元素
table_header = driver.find_elements_by_xpath('//table[@class="dataintable"]//tr[1]//th')
for header in table_header:  # 循环获取元素
   print(header.text)  # 打印文本内容
driver.quit()

示例3:定位表格第二列数据内容

复制代码
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(r'http://www.w3school.com.cn/cssref/css_selectors.asp')
# //table[@class="dataintable"]//tr[y]//td[x]   y第几条记录,x第几列数据
# //table[@class="dataintable"]//tr//td[2] 获取第二列数据
table_header = driver.find_elements_by_xpath('//table[@class="dataintable"]//tr//td[2]')
for header in table_header:  # 循环获取元素
   print(header.text)  # 打印文本内容
driver.quit()

示例4:获取表格中所有的数据

复制代码
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(r'http://www.w3school.com.cn/cssref/css_selectors.asp')
# //table[@class="dataintable"]//tr 定位所有行
tables = driver.find_elements_by_xpath('//table[@class="dataintable"]//tr')
for tr in tables:  # 循环每行元素
   for td in tr.find_elements_by_tag_name('td'):  # 循环获取列
       print(td.text, end='\t\t')
   print('\n')
driver.quit()

定位表格,采用find_elements 组定位,使用xpath=//table//tr[y]//td[x](y第几条记录,x第几列数据),当y或者x其中一个没有值时定位一行或一列。

END今天的分享就到此结束了,点赞关注不迷路~

相关推荐
有风南来12 小时前
算术图片验证码(四则运算)+selenium
自动化测试·python·selenium·算术图片验证码·四则运算验证码·加减乘除图片验证码
程序员三藏17 小时前
如何使用Jmeter进行压力测试?
自动化测试·软件测试·python·测试工具·jmeter·测试用例·压力测试
编程乐学(Arfan开发工程师)17 小时前
42、响应处理-【源码分析】-浏览器与PostMan内容协商完全适配
java·spring boot·后端·测试工具·lua·postman
集成显卡1 天前
PlayWright | 初识微软出品的 WEB 应用自动化测试框架
前端·chrome·测试工具·microsoft·自动化·edge浏览器
互联网杂货铺1 天前
完美搭建appium自动化环境
自动化测试·软件测试·python·测试工具·职场和发展·appium·测试用例
测试老哥1 天前
Jmeter如何进行多服务器远程测试?
自动化测试·软件测试·功能测试·测试工具·jmeter·测试用例·性能测试
鱼鱼说测试1 天前
postman基础
测试工具·postman
程序员杰哥2 天前
Postman常见问题及解决方法
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·postman
齐鲁物联网测试中心王工2 天前
第三方测试机构进行科技成果鉴定测试有什么价值
功能测试·性能测试·cma·第三方检测·cnas·政策申报·科技成果评价
小堃学编程2 天前
Selenium常用函数介绍
selenium·测试工具