05 2020 档案
摘要:在一个项目中往往不可能只有一个用例,也不可能只有一个页面,所有这里就涉及到用例的组织方式 unittest最核心的四部分是:TestCase,TestSuite,TestFixture,TestRunner 1.TestCase,就是外面常说的用例,记住需要以test开头 2.TestSuite,就
阅读全文
摘要:文章太长不看版: setUp(): 每个测试case运行之前运行 tearDown(): 每个测试case运行完之后执行 setUpClass(): 必须使用 @classmethod装饰器, 所有case运行之前只运行一次 tearDownClass(): 必须使用 @classmethod装饰器
阅读全文
摘要:前面都做了那么多铺垫,终于进入正题了,前面的文章把基类写了,流程类写了,本篇便进入断言阶段 判断预期结果和实际结果是否一致 在TestSuites包下,建立test_baidu.py文件 from Base import * from PageObjects import * from Flow i
阅读全文
摘要:上篇说到,我们的测试步骤 1,打开 百度 2,搜索关键字selenium 3,点击 知道 4,获取百度知道页第一条链接的href属性 5,对比该属性和预期结果是否一样 其实可以将这5个步骤分成三类 1,打开页面 2,进行测试 3,对比实际结果和预期结果 流程类,就是将测试步骤打包在一起,比如这个用例
阅读全文
摘要:今天开始的文章就开始涉及到具体的业务逻辑流程了 我们要测试的一个用例步骤为 1,打开 百度 2,搜索关键字selenium 3,点击 知道 4,获取百度知道页第一条链接的href属性 5,对比该属性和预期结果是否一样 页面类主要是封装在该页面或者该流程上的一些基本方法,以达到复用代码便于维护的目的
阅读全文
摘要:在Base包中新建一个BasePage.py 这个文件中,主要封装一些基础的操作,比如说打开url,关闭浏览器,点击,输入,获取元素等与业务逻辑无关的最底层的操作 这个类,可以根据不同的项目需求进行拓展,本文只是举了一个简单的例子 class BasePage(object): def __init
阅读全文
摘要:结构目录如上: Base包:存放一些基类,这次我们要封装的浏览器引擎类放在这个包里面 TestSuites:存放测试用例,新建Test.py来测试这个引擎类 Utils:存放工具类,chrome和firefox的驱动放在这里面 Browser_engine.py import os from sel
阅读全文
摘要:前面一直在说,我理解的UI自动化就是 启动 - 定位 - 操作 - 断言 前面所有的脚本,几乎都是在一段代码中,将这四个步骤全部揉在了一起,一两个case倒是没有什么大问题,要是让你维护100个,1000个case呢。 如果某一天一个UI的元素定位发生了变化,其中涉及到500条case,那岂不是要改
阅读全文
摘要:听大佬讲过自动化测试的三个层次 1.手工测试用例到自动化测试脚本的转化 2.设计/维护自动化测试框架 3.流程的自动化方案设计,比如说一键打包,自动部署,自动测试,生成报告等 前面的例子,基本都是讲解第一阶段的内容,从这篇开始,将开始包含一些selenium的二次封装的东西,以及框架的设计方案,工程
阅读全文
摘要:前面有说过在测试过程中可以截图,截图后,我们可以通过对比截图的相似度,来进行断言 本文介绍两个可以对比截图相似度的方法 方法一: from PIL import Image import math import operator from functools import reduce def im
阅读全文
摘要:在测试过程中,有可能会遇到访问网站需要授权的问题,只有进了这个门,才能谈继续操作的问题 这个问题的关键代码在于 driver.get("http://username:password@xxxxx.com") 将网站授权的用户名密码按上面的格式放置,就可以正常访问网站啦
阅读全文
摘要:在有的测试网站中,图片过多,很影响加载速度,所以可以不影响业务流程的情况下,屏蔽掉网站上的图片,进行测试 思路就是启动一个自定义的浏览器,自行配置相关设置就可以了 from selenium import webdriver from selenium.webdriver.chrome.option
阅读全文
摘要:在UI自动化测试中,往往需要页面加载完成才能进行下一步操作,而一般情况下脚本的运行速度又很快。所以经常会出现脚本运行过快,页面还没加载出来,就进行操作,就会报错。 所以合适的等待,在自动化测试中有比较重要的作用。 本文主要介绍,自动化工程中,比较常用的三种等待方式 1.强制等待 time.sleep
阅读全文
摘要:在平时的测试中,有可能需要定位的元素,不在当前的画面内,就会对滚动条产生一定的操作。对滚动条的操作,实际上也是selenuim对JS的一种操作,正因为selenuim可以对js进行操作,也就有了极大的操作空间 本文主要介绍两个方法: scrollTo(x,y) x表示横向距离,y表示纵向距离 其中
阅读全文
摘要:截图主要用到的方法是: get_screenshot_as_file() 实验步骤: 1,打开百度,进行截图 2,在输入框中输入 selenium 关键字,进行截图 3,点击“百度一下”,进行截图 from selenium import webdriver import time driver =
阅读全文
摘要:本文主要介绍selenium对alter,prompt,confirm弹窗的处理 1.alter弹窗 HTML代码 <html> <button id="clickme" type="button" onclick="display_alter()">Click Me</button> <scrip
阅读全文
摘要:在测试中,有时会遇到一个网页用iframe嵌套另一个网页的情况,如我们今天实验的例子 如果要操作计算器的页面元素,需要首先切换到计算器的iframe上面 切换到iframe上的四种方式,一般情况下用id和name就能解决绝大多数问题 # 1.用index来定位 driver.switch_to.fr
阅读全文
摘要:在我们进行测试的过程中,经常会遇到点开超链接打开另一个新窗口的情况,即 target="_blank",这种情况下,如果要在新窗口进行操作,需要将焦点移到新窗口上,本文将介绍这种情况的处理 切换窗口的方法: 1.获取当前页面窗口的句柄 current_window_handle 2.获取所有页面窗口
阅读全文
摘要:在使用之前需要导入Select模块 from selenium.webdriver.support.ui import Select 此次试验的HTML代码 <html> <select id ="select-test"> <option value="wechat">微信</option> <o
阅读全文
摘要:本文主要讲解,在selenium自动化中,实现文件上传的两种方式。 本章节实验的HTML代码: <html> <form action="http://baidu.com" target="" id="uploadForm" enctype="multipart/form-data"></form>
阅读全文
摘要:在使用之前需要导入ActionChains模块 from selenium.webdriver.common.action_chains import ActionChains 先看一个例子,在百度中搜索 hahah,然后将鼠标移动到 设置 按钮上,并点击菜单中的 搜索设置 from seleniu
阅读全文
摘要:在上节中我说到,我理解的自动化的主要流程是启动-定位-操作-断言,这节主要介绍定位的八种基本方法 在平时写码的过程中,IDE也会有相应的提示 单个元素 多个元素 1.根据id定位 find_element_by_id() 2.根据name定位 find_element_by_name() find_
阅读全文
摘要:最近想好好写写博客,就继续以前关于web自动化的写,希望能写成一个系列 webdriver在驱动浏览器时,需要下载对应的驱动,注意需要和自己所使用的浏览器版本相匹配 Chrome下载 chromedriver.exe 下载地址 http://chromedriver.storage.googleap
阅读全文
摘要:线程同步的问题主要是出现在多个线程对同一个共享资源进行访问时,可能会出现一些问题,为了保证数据的安全性和准确性,需要对多线程进行同步,保证一个时刻,只有一个线程在对共享资源进行访问。 先看例子, import threading,time testList = [0] * 10 #生成一个有10个0
阅读全文
摘要:在多线程调度中常常会遇到的三个场景: 主线程 子线程 方法 结束 继续执行 setDaemon(False)默认 结束 跟着主线程立刻结束 setDaemon(True) 结束->阻塞 执行结束后,一起终止 join() 1.当一个进程启动后,会默认产生一个主线程,当设置多线程时,主线程会创建多个子
阅读全文
浙公网安备 33010602011771号