| 万叶集 |
|---|
| 隐约雷鸣,阴霾天空。 |
| 但盼风雨来,能留你在此。 |
前言:
✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 哈士奇 ,一位致力于 TFS 赋能的博主 ✌
CSDN博客专家认证、新星计划第三季全栈赛道 top_1 、华为云享专家、阿里云专家博主
如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。
如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦
专栏系列(点击解锁) 学习路线指引 知识定位 Python全栈白皮书 零基础入门篇 以浅显易懂的方式轻松入门,让你彻底爱上Python的魅力。 语法进阶篇 主要围绕多线程编程、正则表达式学习、含贴近实战的项目练习 。 自动化办公篇 实现日常办公软件的自动化操作,节省时间、提高办公效率。 自动化测试实战篇 从实战的角度出发,先人一步,快速转型测试开发工程师。 数据库开发实战篇 更新中 爬虫入门与实战 更新中 数据分析篇 更新中 前端入门+flask 全栈篇 更新中 django+vue全栈篇 更新中 拓展-人工智能入门 更新中 网络安全之路 踩坑篇 记录学习及演练过程中遇到的坑,便于后来居上者 网安知识扫盲篇 三天打鱼,不深入了解原理,只会让你成为脚本小子。 vulhub靶场漏洞复现 让漏洞复现变得简单,让安全研究者更加专注于漏洞原理本身。 shell编程篇 不涉及linux基础,最终案例会偏向于安全加固方向。 [待完结] WEB漏洞攻防篇 2021年9月3日停止更新,转战先知社区等安全社区及小密圈 渗透工具使用集锦 2021年9月3日停止更新,转战先知社区等安全社区及小密圈 点点点工程师 测试神器 - Charles 软件测试数据包抓包分析神器 测试神器 - Fiddler 一文学会 fiddle ,学不会倒立吃翔,稀得! 测试神器 - Jmeter 不仅是性能测试神器,更可用于搭建轻量级接口自动化测试框架。 RobotFrameWork Python实现的自动化测试利器,该篇章仅介绍UI自动化部分。 Java实现UI自动化 文档写于2016年,Java实现的UI自动化,仍有借鉴意义。 MonkeyRunner 该工具目前的应用场景已不多,文档已删,为了排版好看才留着。
文章目录
- UI自动化脚本设计场景剖析
- 利用脚本实现从登录到购买门票的场景基线流程
前面章节利用本地 html 文件的虚拟场景辅助我们了解了元素的定位、元素的操作,熟悉了正常脚本的流转运行过程。从这一章节开始,将对之前接口自动化测试篇章所使用的旅游网这样的一个项目,进行真实的UI自动化脚本的设计。
很多时候在实际工作中发生的困难往往是在真实的操作过程中真实遇到的,接下来我们就一边编写脚本一边解决在常见的UI自动化脚本设计中遇到的问题,同时也辅助我们去完成一些更后续的偏框架类型的搭建,让我们的代码、脚本变得更好看一些。
UI自动化脚本设计场景剖析见下图:
虽然整个页面是偏向于手机端的,但是通过 WEB 也可以访问到,从 WEB 端的呈现可以看到它与其他的某些旅游网站功能大体相似。有首页、顶部广告位(banner)、精选景点,还支持搜索。可以登录,可以下订单购买门票,甚至后续的好评等等等等…
接下来我们就将登录、产品的购买、预定、提交订单、支付,这通常是一个正常旅游网站的通用的流程。也是当前旅游网站的一个核心基线流程,不如就将这样一个核心基线流程编程自动化脚本实现的方式。
脚本的实现方式具体分为以下几个部分:进入首页、跳转至登录页、登录页执行登录操作、执行登录后跳转至首页选择要购买的产品执行某一个门票或者其他类型的预定、预定后完成支付的动作、回到订单页。
利用脚本实现从登录到购买门票的场景基线流程代码示例如下:
# coding:utf-8
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
# 访问旅游网首页
driver.get("http://django.t.mukewang.com/#/")
# 跳转至登录页
element_mine = driver.find_element_by_xpath("//*[@id='app']/div[1]/div[5]/div[3]") # Xpath 定位 "我的" 元素
sleep(1)
element_mine.click() # 针对 "我的" 元素执行 click 操作
sleep(1)
# 执行登录操作,分别输入账号和密码执行登录,然后点击 "首页" 跳转至 "首页"
driver.find_element_by_xpath("//*[@id='app']/div[1]/form/div[1]/div[2]/div/input").send_keys("13500000001")
driver.find_element_by_xpath("//*[@id='app']/div[1]/form/div[2]/div[2]/div/input").send_keys("Success@2020")
driver.find_element_by_xpath("//*[@id='app']/div[1]/form/div[3]/button").click() # 点击登录按钮跳转的是个人中心
sleep(1)
driver.find_element_by_xpath("//*[@id='app']/div[1]/div[5]/div[1]").click() # 点击 "首页",跳转至首页。
sleep(2)
# "首页" 购买产品执行下单操作
driver.find_element_by_xpath("//*[@id='app']/div[1]/div[4]/div[2]/a[1]").click()
sleep(1)
driver.find_element_by_xpath("//*[@id='app']/div[1]/div[5]/div[2]/div[2]/a").click() # 针对 "预定" 按钮执行点击操作
driver.find_element_by_xpath("//*[@id='app']/div[1]/form/div[1]/div[1]/div[2]/div/input").send_keys("2022-06-15") # 选择日期
driver.find_element_by_xpath("//*[@id='app']/div[1]/form/div[4]/div/button").click() # 点击 "提交订单" 按钮
sleep(1)
driver.find_element_by_xpath("//*[@id='app']/div[1]/form/div/div/button").click() # 点击 "立即支付" 按钮
# 需要注意的是,这里的 "确认" 按钮,不是弹出框的处理方式
driver.find_element_by_xpath("/html/body/div[5]/div[3]/button[2]").click() # 点击 "支付确认" - "确认" 按钮
sleep(2)
driver.quit()
运行结果如下:
结合上文中的脚本,我们会发现三点问题:
- 第一点:在页面元素不太标准化,没有标准的属性功能使用的情况下,只有 Xpath 与 css selector 能够保证一定定位到元素。最提倡使用的还是 Xpath 的方式。
- 第二点:在页面与页面之间会存在一定的时间差,如果没有定位响应全局的等待时间、响应时间的情况下。可以使用简短、快速的 “sleep()” 的方式能够减少由于页面跳转所带来的的元素还没有加载出来的影响。
- 第三点:一但页面上出现了元素不容易点击、不可以点击的情况,可以通过 JavaScript 的方式来处理,示例如下:
- driver.execute_script('$(arguments[0]).click()', element)
到了这里,一个比较完整的流程的自动化测试脚本算是编写好了,下一章节,将把该脚本放到 unittest 框架里去做一些操作,来丰富完善我们的测试方式。
吐槽一下,这种自上而下执行脚本的方式,真的太丑了!



