目录

第 1 章、自动化测试

第 2 章、Python基础

第 3 章、元素定位方式

第 4 章、元素 | 浏览器操作方法

第 5 章、元素等待

第 6 章、鼠标和键盘操作

第 7 章、UnitTest+PyTest

第 8 章、项目实战并自动发送测试报告邮件【文末配套学习资源免费分享】


第 1 章、自动化测试

1.1、自动化测试介绍

自动化测试就是通过自动化测试工具帮我们打开浏览器,输入网址,输入账号密码登录,及登录后的操作,总的说来自动化测试就是通过自动化测试脚本来帮我们从繁琐重复的手工测试里面解脱出来,把时间和精力花到更好的地方去,去挖掘更多的产品缺陷。

例如网上有一些人提供智慧树网、学习通等网课的刷课及答题的服务就是通过写自动化测试程序去完成的。还有一些高速抢票平台也是通过定时执行自动化程序脚本代替人工去抢票。

1.2、自动化测试优点

1. 更好的利用资源,节约人力成本;

2. 覆盖更全,提高工作效率;

3. 产品规格统一标准,增加软件的稳定性。

1.3、自动化测试缺点

问题:是不是自动化测试一定会取代手工测试?

答:不一定的,自动化测试只是帮我们从繁琐重复的手工测试里面解脱出来,把时间和精力花到更好的地方去,去挖掘更多的产品缺陷。因凡事都有利弊,自动化测试适合的场景是软件需求变更少,周期长,稳定性较强的项目。如果需求变更多,软件经常进行改版就不适合做整个系统的自动化测试了,因为每一次改版都要去维护测试脚本,但可以抽取部分稳定的功能做自动化测试。

1.4、自动化测试能解决的问题

  1. 高效完成回归测试。回归测试就项目在发新版本之后,对项目之前的功能进行验证;每一次小迭代,加了一个小功能可能会影响整个系统的功能,比如淘宝、京东等大型商城有几十万个商品列表,这样手工去回归验证就会非常麻烦。而使用自动化测试脚本,就可以根据迭代功能修改自动化测试的脚本去验证,没问题就上线,有问题就让开发改完再上线,这样就不用手工去一个个验证,这就是自动化测试的好处。

  2. 解决-兼容性测试,更换不同浏览器的驱动就可以解决兼容性测试。

  3. 提高测试效率,保证产品质量。

第 2 章、Python基础

2.1、Python常用快捷键

2.2、函数

在开发程序时,使用函数可以提高编写的效率以及代码的重用。

(1)函数的使用包含两个步骤:

1. 定义函数 —— 封装独立的功能;

2. 调用函数 —— 执行函数的代码;

(2)定义函数的格式如下:

函数名称应该能够表达函数封装代码的功能,方便后续的调用。

(3)变量作用域:

1. 局部变量只能在函数内部使用,局部变量从调用函数的时候开始在内存出现,函数调用完毕,局部变量从内存消失;

2. 全局变量从定义变量开始在内存中出现,一直到程序运行完成,和程序一起从内存中消失。

在其他的开发语言中,大多不推荐使用全局变量,因为可变范围太大,导致程序不好维护!

2.3、面向对象编程

面向对象就是将世间万物抽象成一个类,然后形成相应的对象。

(1)类

类就是一个模板,是对一群具有相同特征或者行为的事物的一个统称,是抽象的模板,不能直接使用。

1.类的特性----属性;

2.类中行为----方法;

比如猫这个类有年龄,姓名,主人等属性,有学习、跑步、吃饭、睡觉等方法。

(2)对象

对象就是类的实例化,比如猫这个类可以实例化,具体是什么猫。

(3)面向对象程序设计三大特性:

  1. 封装:根据职责将属性和方法封装到一个抽象的类中,需要用到的时候导包,就可以调用属性和方法了;

  2. 继承:实现代码的重用,子类继承父类就可以拥有父类的属性和方法,这样相同的代码不需要重复的编写;

  3. 多态:不同的对象调用相同的方法,产生不同的执行结果,这样可以增加代码的灵活度。

第 3 章、元素定位方式

3.1、Selenium3.x提供了八种定位元素方式

1. id

2. name

3. class_name

4. tag_name

5. link_text

6. partial_link_text

7. CSS选择器

8. XPath

3.2、id选择器

#找到输入框id后,选中输入框,输入"鹰迅课堂"关键词。

driver.find_element_by_id("kw").send_keys("鹰迅课堂")

3.3、name选择器

driver.find_element_by_name("wd")).send_keys("鹰迅课堂")

3.4、class_name选择器

driver.find_element_by_class_name("s_ipt").send_keys("鹰迅课堂")

3.5、tag_name标签名选择器

ind_element_by_tag_name() 通过标签名去定位,页面相同的标签名重复率多,基本不用。

3.6、link_text超链接内容选择器

driver.find_element_by_link_text("点击进入所有课程").click()

3.7、partial_link_text模糊查询

driver.find_element_by_partial_link_text("所有课程").click()

3.8、CSS选择器

driver.find_element_by_css_selector("div.row:nth-child(5) > div:nth-child(2) > div:nth-child(1) > div:nth-child(2) > div:nth-child(3) > div:nth-child(1) > a:nth-child(1)").click()

3.9、XPath定位方式

driver.find_element_by_xpath("/html/body/div/main/div/div/div[4]/div[2]/div/div/div/div[1]/a").click()

3.10、总结

  1. 定位到一个网页元素后,有输入框使用send_keys(),没有输入框,如果是按钮就用click()进行点击。

  2. 很多时候页面的元素可能是没有id的,没有唯一标识,需求评审的时候可以跟开发约定,网页的元素尽量要有唯一的id和name。

3.11、selenium4定位方式新写法

第 4 章、元素 | 浏览器操作方法

4.1、元素常用操作方法

4.2、操作浏览器常用方法

第 5 章、元素等待

元素等待就是——在定位页面元素时如果未找到,会在指定时间内一直等待的过程。

5.4、为什么要设置元素等待

  1. 网络速度慢

  2. 电脑配置低

  3. 服务器处理请求慢

5.4、强制等待

from time import sleep

sleep(10)

强制等待10秒,再执行下一步,缺点是不管资源是不是完成,都必须等待指定的时间。

5.4、隐式等待

(1)概念:定位元素时,如果能定位到元素则直接返回该元素,不触发等待,执行下一步;如果不能定位到该元素,则间隔一段时间后再去定位元素;如果在达到最大时长时还没有找到指定元素,则抛出元素不存在的异常 NoSuchElementException 。

(2)方法:driver.implicitly_wait(timeout) (timeout:为等待最大时长,单位:秒) ,driver.implicitly_wait(10) ,最长等待10秒。

(3)说明:隐式等待只需要设置一次,就会作用于全局所有的元素。

5.4、显式等待

概念:定位指定元素时,如果能定位到元素则直接返回该元素,不触发等待;如果不能定位到该元素,则程序每隔N秒检查一次,如果检查到目标元素,加载完成,执行下一步,否则继续等待,直到超过设置的最长时间,则抛出超时异常 TimeoutException 。

在Selenium中把显式等待的相关方法封装在WebDriverWait类中。

练习题:打开百度,使用显性等待定位百度输入框,如果元素存在,就输入"www.yxclass.net"。

5.4、隐性等待与显性等待的区别

  1. 作用域不同:隐式为全局元素,是设置全局的等待,显式等待为单个元素有效。

  2. 使用方法不同:隐式等待直接通过驱动对象调用,而显式等待方法封装在WebDriverWait类中。

  3. 达到最大超时时长后抛出的异常不同:隐式等待默认检测频率为0.5s,超时异常为NoSuchElementException;显式等待超时异常为TimeoutException。

第 6 章、鼠标和键盘操作

6.1、鼠标操作

常见的鼠标操作有:点击、右击、双击、悬停、拖拽等,对于这些鼠标操作Selenium都封装了相应的操作方法。

6.2、鼠标操作的方法

(1)说明:

在Selenium中将操作鼠标的方法封装在ActionChains类中。

(2)实例化对象:

action = ActionChains(driver)

(3)执行鼠标事件原理:

在ActionChains类中所有提供的鼠标事件方法,在调用的时候,所有的行为都存储在ActionChains对象中,调用ActionChains的方法时不会立即执行,会将所有的操作按顺序存放在一个队列里,当调用perform()方法时,队列中的事件会依次执行,先进先出,后进后出。

(4)强调:必须调用perform()方法才能执行鼠标事件。

(5)支持链式写法或者分步写:

ActionChains(driver).click(ele).perform()

(6)鼠标和键盘常用方法列表:

(7)鼠标和键盘常用方法:

(8)例题

6.3、键盘操作练习题

(1)Selenium中把键盘的按键都封装在Keys类中,使用时要导包。

(2)导包:from selenium.webdriver.common.keys import Keys

6.4、常用的键盘操作

练习题:在百度浏览器搜索框输入www.yxclass.net,然后粘贴到搜狗浏览器的搜索框进行搜索。

6.5、自动化测试答题

单选框是这样答,多选题也是一样的回答方法。

6.6、弹窗处理

应用场景:

  1. 删除在线商城购物车的商品,在删除时,需要选择是否删除。

  2. 在播放视频课程中也会有一些答题窗口,答题后才能继续播放视频。

弹出框处理方法:

  1. 获取弹出框对象:alert = driver.switch_to.alert

  2. 调用:

  • alert.text --> 返回alert/confirm/prompt中的文字信息

  • alert.accept()  --> 接受对话框选项

  • alert.dismiss() --> 取消对话框选项

练习题:点击confirm后,弹出页面提示框选择“确定”。

答了一题没法自动切换到下一题的话,就要调用switch_to_alert()方法切换窗口。

6.7、下拉选择框

(1)说明:

Select类是Selenium为操作select标签特殊封装的。

(2)实例化对象:

select = Select(element)

element: <select>标签对应的元素,通过元素定位方式获取,

例如:driver.find_element_by_id("index")

(3)操作方法:

(4)Select类实现步骤分析:

(5)示例代码:

6.8、滚动条

selenium中并没有直接提供操作滚动条的方法,但是它提供了可执行JavaScript脚本的方法,所以我们可以通过JavaScript脚本来达到操作滚动条的目的。

1.设置JavaScript脚本控制滚动条

js = "window.scrollTo(0,1000)"

#(0:左边距;1000:上边距;单位像素)

示例:滑动到最底层

js1 = "window.scrollTo(0,10000)"

driver.execute_script(js1)

2. selenium调用执行JavaScript脚本的方法

driver.execute_script(js)

示例:滑动到最顶层

js2 = "window.scrollTo(0,0)"

driver.execute_script(js2)

练习题:滑动到鹰迅课堂网站的最底层。

6.9、窗口截图

说明:在Selenium中,提供了截图方法,需要进行截图时我们只需要调用即可方法:driver.get_screenshot_as_file(imgpath) #imgpath:图片保存路径。

6.10、跳过验证码

(1)验证码说明:一种随机生成的信息(数字、字母、汉字、图片、算术题)等为了防止恶意的请求行为,增加应用的安全性。

(2)解决验证码问题的几种常用处理方式:

  1. 去掉验证码:测试环境下采用;

  2. 设置万能验证码:开发环境和测试环境下采用;

  3. 验证码识别技术:通过Python-tesseract来识别图片类型验证码;识别率很难达到100%;

  4. 记录cookie:通过记录cookie进行跳过登录。

(3)跳过验证码登录百度

BDUSS是登录百度后的唯一身份凭证(*.baidu.com),拿到BDUSS就等于拿到账号的控制权。

第 7 章、UnitTest+PyTest

7.1、UnitTest介绍

UnitTest是python自带的自动化测试框架;

UnitTest主要包含的内容:

  • TestCase(测试用例)

  • TestSuite(测试套件,把多个TestCase集成到一个测试TestSuite中,按照从上往下顺序执行)

  • TestRunner(执行测试用例)

  • TestLoader(自动从代码中加载多个测试用例TestCase)

  • Fixture(UnitTest特性)

7.2、PyTest

pytest 是 python 的一种单元测试框架,同自带的 UnitTest 测试框架类似,相比于 UnitTest 框架使用起来更简洁,效率更高

pytest 在运行自动化脚本的前后会执行两个特殊的方法,分别是 setup 和 teardown 。在执行脚本之前会执行 setup 方法,在执行脚本之后会执行 teardown 方法。有了这两个方法,我们可以在 setup 中进行获取驱动对象的操作,在 teardown 中进行关闭驱动对象的操作。

第 8 章、项目实战并自动发送测试报告邮件

需求:测试鹰迅课堂所有已经上线了的课程。

代码:

自动发送测试邮件

测试用例设计应该解耦,独立运行,脚本应该按照模块化分层。这样在软件每次迭带的时候,就可以根据迭带情况快速修改对应模块的自动化测试脚本了。

执行用例时就会进行截图。

脚本执行结束后,就自动发送测试报告邮件了。

  今天的分享就到此结束了 ,如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

这些对想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等配套学习资源免费分享~

一文8个步骤从0到1实现Python+Selenium自动化测试项目实战【建议收藏】相关推荐

  1. 【Java从0到架构师】个人简历项目实战

    项目实战 功能性 登陆流程 验证码 JavaWeb Service.Dao 方法名规范 form 文件上传 - 前端.后台.实时预览 页面可见性 Service 层 面向接口编程 后端技巧 利用 Ja ...

  2. 一文8个步骤从0到1教你基于数据驱动的接口自动化框架封装

    目录 1.数据驱动框架设计 2.数据驱动框架底层代码实现 3.接口调用底层方法封装 4.辅助函数封装及引用定义 5.excel中动态数据的正则替换 6.统一测试方法封装 7.集成日志收集 8.allu ...

  3. 安装python步骤-从0到1,Python安装步骤详解(附基础知识简介)!

    Python下载安装步骤 python解释器,在Linux中可以内置安装,而在windows中则需要去下载.具体步骤如下: 第一步:通过Web浏览器,访问http://www.python.org官网 ...

  4. python安装步骤-从0到1,Python安装步骤详解(附基础知识简介)!

    Python下载安装步骤 python解释器,在Linux中可以内置安装,而在windows中则需要去下载.具体步骤如下: 第一步:通过Web浏览器,访问http://www.python.org官网 ...

  5. 8000字讲清楚从0到1搭建电商商品中心(建议收藏)

    <电商产品经理从0到1>系列文章面向0~3岁的产品经理或者有多年产品工作经验却刚接触电商领域的产品经理. 本系列文章将详细介绍电商核心系统的产品设计方案,帮助你体系化地认识电商产品. 看完 ...

  6. 【0基础学java】教学日志:项目实战-坦克大战-3

    本章概述:本章主要讲了 1.定义坦克方向的enum,根据按键状态确定坦克方向,根据坦克方向确定坦克位移. 2.抽象出坦克类,封装相应的属性和方法,在tankFrame中直接调用. 3.添加坦克静止的处 ...

  7. 王姨劝我学HarmonyOS鸿蒙2.0系列教程之六自定义View涂鸦项目实战!

    这一节写个简单的项目,涂鸦,简单来讲就是画什么,显示什么.最好的网站,就是官网,这里再发一下: https://developer.harmonyos.com/cn/docs/documentatio ...

  8. 1.5万字讲清楚从0到1搭建电商营销中心(建议收藏)

    <电商产品经理从0到1>系列文章面向从事电商类.交易类产品方向并希望在该方向深耕的产品经理. 本系列文章将详细介绍电商核心系统的产品设计方案,帮助你体系化的认识电商产品. 本文章为< ...

  9. python+pycharm+selenium自动化测试环境搭建步骤

    python+pycharm+selenium自动化测试环境搭建步骤 原文链接:https://blog.csdn.net/weixin_51429941/article/details/116850 ...

最新文章

  1. Python 爬取北京二手房数据,分析北漂族买得起房吗?(附完整源码)
  2. 以太坊和Metamask开发web应用时不再需要密码
  3. Spring boot优点
  4. sql 两个表列包含_Oracle数据库扩展语言PL/SQL之运算符
  5. P06: 分组的背包问题
  6. 6 日期字符串转日期_日期居然用字符串保存?我笑了
  7. python和区块链哪个好_10个最流行的Python区块链开源项目
  8. inDesign教程,如何设置打印出血?
  9. 工程图字体宋体仿宋_Windows自带的宋体、黑体、楷体、仿宋体等能免费商用吗?...
  10. 深度学习阅读导航 | 02 Faster R-CNN:基于RPN的实时目标检测
  11. 10月20日前!武汉市科技成果转化中试平台(基地)备案申报条件及流程梳理
  12. 苹果cmsV10添加全屏幻灯图、全屏轮播图教程
  13. Kubernetes 1.14 发布,31 项功能增强
  14. ps -aux 命令详解
  15. PHP系统开发/Web文章博客
  16. 一些技巧,如何更高层次编写优质嵌入式C代码?
  17. 用友U8案例教程存货核算前台操作
  18. Leaflet实现地图按照行政区划遮罩
  19. 七牛将图片空间迁移到另外一个空间
  20. 2021你还找不到的查询行业数据行业报告平台地址大全

热门文章

  1. 业务系统接入单点登录服务
  2. 放大电路的分析方法2:图解法
  3. OpenLayers加载谷歌地球离线瓦片地图
  4. 如何将MATLAB程序插入到.net(C#)中(流程以及常见错误总结)
  5. 数据结构与算法(九)—— 二叉树结构及其实现和应用
  6. 蚂蚁爬绳java_腾讯面试题——蚂蚁爬行(Java版)
  7. iOS 应用之间的跳转
  8. Android 9.0/P(android p指安卓9.0版本) okhttp3网络请求出错
  9. MySQL事务隔离级别:可重复读、读已提交、读未提交。实操
  10. 图片噪声 降噪 边缘检测