1.⾃动化测试+selenium+⼋⼤定位元素
1.⾃动化测试简介
1.1 什么是⾃动化测试
⾃动化测试就是把以⼈为驱动转化为 机器执⾏的过程。⽬的是将过于繁杂的固定的⼿⼯测试⾏为转化为⾃动化执⾏,从⽽有更多的时间来⾛⼿⼯测试。
⾃动化功能测试:测开。⽬前主流技术:Selenium
⾃动化性能测试:性能测试
⾃动化测试可以实现:
1.⼀般都是应⽤在回归测试阶段,对系统的核⼼流程(固定的流程)进⾏回归测试时使⽤。简单来说⾃动化就是⼀个测试⼿段
2.⼀般⾃动化是如何确定执⾏的?
开会——评估系统是否具备⾃动化的条件——评估提取的核⼼主体是哪些是必须要纳⼊⾃动化测试范畴
的——设计⾃动化测试框架——制定研发计划——实现——测试部署
1.2 测试开发是什么?
测试开发是应⽤代码来实现⾃动化测试,Django和Flask是python web框架
⾃动化分层 :
*UI层:基于系统UI界⾯来实现的⾃动化测试,是颗粒度最粗,主要关注功能和流程的正常实现,应⽤Rrequests和Appium来实现这个层级的测试技术
*Service层:接⼝⾃动化,主要关注服务于系统的接⼝数据是否正常,逻辑是否正确,应⽤Requests和HTTPClient来实现测试
Unit层:单元测试层级,测试粒度最⼩,Junit5和UnitTest来实现的
⾃动化测试的实际介⼊:1.常规的回归测试阶段
2.接⼝⾃动化,在前后端联调之前可以介⼊实现后端测试
****什么场景适合⾛⾃动化测试:1.长期运⾏的系统,针对项⽬本⾝设计⼀个测试框架(POM设计模式)
2.短平快类型系统 ,针对各类不同项⽬设计⼀套测试框架(关键字驱动设计模式)
3.外包
4.初创团队
NetWork:抓包⼯具,限度设置
Chrome浏览器需要关闭⾃动更新设置(此电脑-管理-应⽤与服务-服务-Google相关服务全部设置为关闭,并且改为⼿动启动⽅式)
什么样的项⽬适合做⾃动化测试?
三个条件:软件需求变更不频繁;项⽬周期⽐较长(最低⼀年以上,最好是⾃研项⽬);
2.Selenium介绍
⽬前业内最核⼼的技术为为⾃动化测试,selenium是最为主流的⾃动化测试⼯具
Appium是基于Selenium继承实现的,
⾃⾏安装WebDriver:百度进⾏下载。⼀定要安装适配版本的Chromedriver,否则启动浏览器会报错
⽆论是什么浏览器,都要关闭⾃动更新。
在现阶段测试中,只会使⽤Selenium+WebDriver来实现⾃动化测试
环境搭建:1.安装Selenium:通过pip install selenium/通过Pycharm中的interpreter来进⾏安装
2.WebDriver:
2.1 Python+Selenium的实际操作
WebDriver+Selenium运⾏原理:
WebDrive:其实是⼀个服务端,启动时时是启动⼀个服务。由该服务上传下发基于HTTP协议的指令
环境配置完成以后,编写⼀个driver_demo来实现访问指定的URL
#导⼊webdriver
from selenium import webdriver
#from selenium.webdriver.chrome.webdriver import WebDriver #创建⼀个浏览器对象
driver=webdriver.Chrome()
#wb=WebDriver(executable_path="chromedriver")
#浏览器访问指定URL
<('www.baidu')
元素的定位,输⼊⽂本,并点击
元素定位就是通过元素的信息或元素层级结构来定位元素的定位元素依赖于1,标签名2,属性3,层级4,路径
#导⼊webdriver
from selenium import webdriver
from selenium.webdriver.chrome.webdriver import WebDriver from selenium.webdrivermon.by import By
#创建⼀个浏览器对象
wb=WebDriver(executable_path="chromedriver")
#浏览器访问指定URL
#元素的定位,先获取webElement,然后在考虑元素如何操作?
ute('findElement',{
'using':By.XPATH,
'value':'//input[@id="kw"]'
})['value']
el._execute('sendKeysToElement',{'text':'刘阳',
'value':''})
ute('findElement',{
'using':By.XPATH,
'value':'//input[@id="su"]'
})['value']
el1._execute('clickElement')
''
⾃动化中的hello world
'''
#导⼊WebDriver模块
from selenium import webdriver
#导⼊强制等待
from time import sleep
#创建chrome浏览器对象
driver=webdriver.Chrome()
#访问指定url
<('www.baidu')
#查需要操作的元素
we_input=driver.find_element_by_id("kw")
#对元素进⾏输⼊操作
we_input.send_keys('刘阳')
#点击百度⼀下按钮,执⾏本次搜索操作
we_button=driver.find_element_by_id('su')
we_button.click()
#WebDriver是⼀个服务端代理,当⾃动化结束时,需要记得释放资源
sleep(5)
driver.quit()
如何访问指定的URL?
Webdriver是浏览器驱动的服务端。Webdriver封装了execute()⽅法,execute()发送请求实例:实战商城实现登录操作
完成上述按钮的步骤:
1. 导包 from selenium import webdriver from time import sleep
2. 获取浏览器对象 driver=webdriver.chrome()
3. 打开()
4. 获取⽂本框 driver.find_element_by_id()
5. 输⼊⽂本内容:driver.send_key()
6. 获取按钮属性位置
7. 点击按钮
8. 暂停⼏秒 sleep()
9. 关闭驱动 driver.quit()
close与quit的区别:close:关闭当前浏览页;quit:关闭浏览器,释放进程
报错:element not interactable 定位的元素⽆法进⾏交互
报错:NoSuchElementException:没有到相关的元素定位
#为实现该功能,报错we_button1.click()
from selenium import webdriver
#导⼊强制等待
from time import sleep
from selenium.webdriver.chrome.webdriver import WebDriver
from selenium.webdrivermon.by import By
#创建chrome浏览器对象
driver=webdriver.Chrome()
#访问指定url
<('39.98.138.157/shopxo/index.php')
#('39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html')
# #查需要操作的元素
# we_input=driver.find_element_by_id("search-input")
#
#
we_button1=driver.find_element_by_xpath('39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html')
we_button1.click()
#输⼊⽤户名、密码
we_input=driver.find_element_by_name('accounts')
we_input.send_keys('666666')
we_input=driver.find_element_by_name('pwd')
we_input.send_keys('111111')
#点击登录按钮
we_button=driver.find_element_by_class_name('am-btn am-btn-primary am-radius am-btn-sm btn-loading-example') we_button.click()
修改为正确代码:
from selenium import webdriver
#导⼊强制等待
from time import sleep
#创建chrome浏览器对象
driver=webdriver.Chrome()
#访问指定url、
#注意:"\"反斜杠是python中的转义字符(本地url地址时,可能会遇到),解决⽅法:前⾯加r(r是⼀个修饰的字符串,如果字符串有转义字符,不进⾏转义使⽤)或者"\\"即可
#使⽤本地浏览模式,前缀必须加file:///
#file:///D:/study/⼤⼆第⼀学期/jsp/jsp课后练习题/0404160218刘阳/index.jsp
<('39.98.138.157/shopxo/index.php')
#查需要操作的元素,该模块需要完成⽤户登录的模拟,休要点击登录输⼊⽤户名、密码,再次点击登录实现登陆成功
driver.find_element_by_link_text('登录').click()
sleep(5)
#输⼊⽤户名、密码
we_input=driver.find_element_by_name('accounts')
we_input.send_keys('666666')
we_input=driver.find_element_by_name('pwd')
we_input.send_keys('111111')
sleep(5)
#点击登录按钮
web_button=driver.find_element_by_link_text('登录').click()
#WebDriver是⼀个服务端代理,当⾃动化结束时,需要记得释放资源
sleep(10)
driver.quit()
3.⼋⼤元素定位
所有的UI层的⾃动化都是基于元素定位来实现的,所有的被操作原⾊,都是webElement对象
元素=html便签
超链接:img/a/input/button/
通⽤:div/li/span/…
实际的系统中,元素的标签不是由表象来决定的,是通过css样式表来决定的
⾃动化时,就是基于标签的属性来定位标签
如何精准定位到需要操作的元素:
⼋⼤元素定位
查单个元素:
{
(id,name,class_name【使⽤元素的class属性的定位】:属性定
(tag_name:【标签名称<;标签名 xxx/>】标签定位) (link_text,partial_link_text[模糊查询]:定位a标签)
(xpath【基于元素路径定位】,css【基于元素选择器定位】:功能强⼤)
}
#基于id定位 (driver.)
查单个元素⽅法执⾏记录
**find_element_by_name√基于name定位 基于元素属性中的name值来进⾏定位 name类似于⾝份证上的名字,有可能重名
**find_element_by_id√基于元素属性中的id值来进⾏定位 id类似于⾝份证号,不出意外,不会重复
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论