利用po模式,业务逻辑和测试逻辑相分离,当某个页面经常发生变化只需要维护页面,包括元素定位表达式,封装业务方法;不需要修改测试逻辑;
页面经常变化正是自动化测试的痛点,我们改不了需求,目前利用po模式是最有效的解决方法。
a、页面经常变化,需要修改脚本
b、脚本不稳定,经常性的跑失败
c、提升效率,会影响稳定性
先切换到弹窗:alert=driver.switch_to.alert
确认:alert.accept()
取消:alert.dismiss()
获取弹窗中文本:alert.getText()
弹窗中输入内容:alert.sendkeys()
以百度浏览器测试:
a、获得百度浏览器的搜索页面窗口
search_window=driver.current_window_handle
b、点击“hao123”标签,跳转到hao123页面
driver.find_element_by_xpath('//a[text()="hao123"]').click()
time.sleep(2)
c、获取所有的窗口句柄
all_handles=driver.window_handles
d、切换到hao123页面
for handle in all_handles:
if handle!=search_window:
driver.switch_to.window(handle)
driver.find_element_by_xpath('//a[text()="网易"]').click()
e、如果再次切换到搜索页面
driver.switch_to.window(search_window)
切换到frame中
def switch_frame(frame_el):
driver.switch_to.frame(frame_el)
el=driver.find_element_by_xpath('//input[@id="kw"]')
el.input('kobe')
frame_el=driver.find_element_by_xpath('//iframe[@name="baidu"]')
switch_frame(frame_el)
回到主页中
driver.switch_to.default_content()
a、通过text文本查找
def select(el):
s=Select(el) #初始化Select对象
s.select_by_visible_text('kobe')
el=driver.find_element_by_xpath('//select[@id="faver"]')
b、通过value值查找
def select(el):
s=Select(el)
s.select_by_value('double')
el=driver.find_element_by_xpath('//select[@id="faver"]')
同时,在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接【点击文末小卡片免费领取资料文档】
软件测试视频教程观看处:
【2024最新版】Python自动化测试15天从入门到精通,10个项目实战,允许白嫖。。。
?
driver.quit():关闭整个浏览器
driver.close():关闭当前页
quit一般用在结束测试之前的操作,close用在执行用例过程中关闭某一个页面的操作
第一种方法:send_keys
a、找到上传文件的入口
b、获取入口的元素的表达式(file_el)
c、上传文件
file_el.send_keys(r'c:\666.doc')第二种方法:pywinauto
?
def upload_file(self):
# 点击上传文件按钮
self.browser.find_element_by_xpath('//span[contains(text(),"点击上传")]').click()
# 使用pywinauto来选择文件
app = pywinauto.Desktop()
# 选择文件上传的窗口
dlg = app['打开']
# 选择文件地址输入框,点击
dlg['Toolbar3'].click()
# 键盘输入上传文件的路径
send_keys(r'C:\Users\Lenovo')
# 键盘输入回车键,打开该路径
send_keys('{VK_RETURN}')
# 选中文件名输入框,输入文件名
dlg['文件名(&N):Edit'].type_keys('1.jpg')
# 点击打开
time.sleep(2)
#dlg['打开(&O)'].click()
dlg['打开(&O)'].double_click()
time.sleep(2)
return self
a、鼠标悬停
1、初始化一个action_chains对象
action=ActionChains(driver)
2、找到要悬浮的元素,
setting_el=driver.find_element_by_xpath(‘//span[@id=“s-usersetting-top”]’) -----> 设置
3、调用鼠标操作的函数,传入move_to_element()函数中
action.move_to_element(setting_el)
4、要让动作生效的话,必须加上perform
action.move_to_element(setting_el).perform()
5、再定位到高级设置标签
top_setting_el=driver.find_element_by_xpath(‘//a[text()=“高级搜索”]’)
top_setting_el.click()
b、拖拽动作
def drag_and_drop(el1,el2)
action=ActionChains(driver)
action.drag_and_drop(el1,el2)
action.proform()
drag_and_drop(el1,el2)
c、双击
def double_click(el)
action=ActionChains(driver)
action.double_click(el)
action.perform()
double_click(el)
项目稳定
回归测试
监控
有误报过,有时候自动化测试报告中显示发现了bug,实际去通过手工测试去确认又不存在该bug。
误报原因一般是:
a、元素定位不稳定(没有进行等待或者等待时间设置的太短;元素是动态变化的,需要优化元素表达式),
b、需要尽量提高脚本的稳定性(使用独立的测试环境,用例与用例之间要相互独立,尽量不要耦合性太强);
c、开发更新了页面但是测试没有及时更新维护!
d、网络问题(页面加载太慢)
效率和稳定性
需求进行大改,代码需要维护
产生误报,原因:11题
a、不要使用强制等待
b、尽量减少不必要的操作
c、减少不必要的io操作
d、尽量使用独立的测试环境,避免其他人修改环境配置
e、用例与用例尽量不要关联,减少用例的耦合性
f、用xpath的相对表达式
g、减少for循环中代码的执行次数
h、多个if条件表达式中尽量把执行频率最高的语句写到最前面
i、定期清理浏览器缓冲,防止浏览器卡顿
万能码
开发关掉
a、需求稳定,不会频繁变更。
b、研发和测试周期长,需要频繁执行回归测试。
c、需要在多种平台上重复运行相同测试的场景。
d、某些测试项目,通过手工测试无法实现,或者手工成本太高。
e、被测软件的开发较为规范,能够保证系统的可测试行
f、线上监控
a、编写自动化测试计划
b、设计自动化测试用例
c、编写自动化测试框架
d、脚本调试
e、执行测试用例、无人值守测试
f、后期脚本维护(添加测试用例、开发更新版本)
a、启动差别
一部手机只能同时测试一个apk包
web端,由于多进程,一台电脑可以开启多个浏览器进行测试
b、安装差别
app端:需要先检查软件是否安装才能进行测试
web端:不需要安装,在浏览器中输入url就可以测试。
c、页面元素操作
d、采用自动化测试框架不同
selenium
appium
a、HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。
b、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
c、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
a、脚本中加入隐形等待和显性等待
b、必要的时候使用强制等待
c、try 方式进行id,name,clas,x path, css selector不同方式进行定位,如 果第一种失败可以自动尝试第二种
d、需要在指定的frame和窗口中
context_click() 右击 --> 此方法模拟鼠标右键点击效果
double_click() 双击 --> 此方法模拟双标双击效果
drag_and_drop()拖动 --> 此方法模拟双标拖动效果
move_to_element() 悬停 --> 此方法模拟鼠标悬停效果
perform() 执行 --> 此方法用来执行以上所有鼠标方法
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。