多线程技术 python通过两个标准库thread和threading提供对线程的支持.thread提供了低级别的,原始的线程以及一个简单的锁.threading基于Java的线程模型设计. 1.threading模块应该避免使用thread模块,原因是它不支持守护线程.当主线程退出时,所有的子线程不管他们是否还在工作,都会被强行退出.有时候并不希望出现此种行为,因此就引入了守护线程的概念.threading模块支持守护线程,所以,我们直接使用threading来改进上述的例子. #thread…
Selenium 2自动化测试实战 百度网盘 链接:https://pan.baidu.com/s/1aiP3d8Y1QlcHD3fAlEj4sg 提取码:jp8e 复制这段内容后打开百度网盘手机App,操作更方便哦 内容简介  · · · · · · <Selenium 2自动化测试实战——基于Python语言>共分 14 章.第 1 章是自动化测试相关基础知识的介绍:第 2 章到第 10 章是<Selenium 2自动化测试实战——基于Python语言>的重点,循 序渐进地介绍…
一.函数.类和方法1.函数在python中通过def关键字来定义函数 创建一个add()函数,此函数接收两个参数a,b,通过print()打印a+b的结果.调用add()函数,并且上传两个参数3,5给add()函数 通过add()函数不会直接打印结果,而是将处理结果通过return关键字返回,如下图所示 有时我们在调用add()函数的时候不想传参,这时可以为add()函数设置默认参数,如下图所示 如果调用时不传参,那么add()函数就使用默认参数进行计算,如果传参则计算参数的值 2.类和方法2.…
虫师的<Selenium 2自动化测试实战 基于Python语言>是我自动化测试的启蒙书 也是我推荐的自动化测试入门必备书,但是书中有一处明显的错误,会误导很多读者,这处错误就是第8章自动化测试高级应用中,第一节自动发送邮件功能中,8.1.4整合自动发送邮件功能 当我们运行如下代码后,会发现邮件发送成功,但是打开邮件发现邮件中的内容为空 在书中182页我们看到了如下解释. 但是这个解释为错误的,引起无法发送最新报告的内容,其实是因为代码中有一处bug,并非HTMLTestRunner报告文件的…
背景 最近在弄 appium,然后顺便发现了 Selenium 框架和这本书,恰好这本书也介绍了一些软件测试&自动化测试的理论知识,遂拿过来学习学习.所以本文几乎没有实践内容,大多都是概念和工具的 mark,后续若有实践,我会来补充的. 一.软件测试 分类 1.根据项目流程阶段划分 需求分析 设计 编码 单元测试 集成测试 系统测试 验收测试 2.白盒测试.黑盒测试.灰盒测试 白盒测试的意义:有时候输出是正确的,但内部其实已经错误了,这种情况非常多. 灰盒测试的意义:如果每次都通过白盒测试来操作…
一.上传文件 上传文件是比较常见的web功能之一,但WebDriver没有提供专门用于上传的方法. 一般web页面的上传功能的操作需要单击“上传”按钮后打开本地的Window窗口,从窗口选择本地文件进行上传.而WebDriver是无法操作Windows控件的,所以,对于web页面的上传功能实现一般由以下两种方式.(1)普通上传:普通的附件上传是将本地文件的路径作为一个值放在input标签中,通过form表单将这个值提交给服务器.(2)插件上传:一般是指基于Flash.JavaScript或Aja…
1.Selenium2 的原理 第一篇分享简单介绍了基于Python开发的Selenium2的环境配置,这篇主要讲一下基本用法.首先讲一下Selenium2的基本原理.基本上知道了这个东西是怎么回事,我们就知道怎么去用它做自动化测试. 与Selenium和Selenium RC不同,Selenium2将浏览器原生的API封装成WebDriver API,可以直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的),所以就像真正的用户在操作一样.其实刚…
Page Object设计模式 Page object是selenium自动化测试项目开发时间的最佳设计模式之一,主要体现在对界面交互细节的封装. 1.认识page object优点如下:1.减少代码的重复2.提高测试用例的可读性3.提高测试用例的可维护性,特别是针对UI频繁变化的项目. 2.page object实例下面以登录新浪邮箱为例,通过page object设计模式来实现. #po_model.py #coding:utf-8 from selenium import webdrive…
HTML测试报告 显然,一份漂亮的测试报告展示自动化测试成果只有一个简单的log文件是不够的.HTMLTestRunner是python标准库unittest单元测试框架的一个扩展,它生成易于使用的HTML测试报告.下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html下载HTMLTestRunner.py文件,选中后右键另存为,保存到本地,然后将其放在python安装目录下的Lib目录下.即:Windows保存到…\pytohn27\L…
编写Web测试用例 1.介绍了unittest单元测试框架,其主要是来运行Web自动化测试脚本.简单的规划一下测试目录:web_demo1/------test_case/------------test_baidu.py------------test_google.py------report/------------login.txt------runtest.py目录结构如下图所示: 创建web测试用例. #test_baidu.py #coding:utf-8 from seleniu…
一.自动化测试模型 自动化测试模型介绍:线性测试.模块化驱动测试.数据驱动测试和关键字驱动测试 线性测试:每个测试脚本相对独立,且不产生其他依赖与调用,只是单纯的来模拟用户完整的操作场景.模块化驱动测试:把重复的操作独立成公共模块,当用例执行过程中需要用到这一模块操作时则被调用.数据驱动测试:就是数据的参数化,因为输入数据的不同从而引起输出结果的不同.不管我们读取的是定义的数组.字典,或者是外部文件(excel.csv.txt.xml等)都可以看做是数据驱动,它的目的就是实现数据与脚本的分离.…
整合自动发邮件功能 解决了前面的问题后,现在就可以将自动发邮件功能集成到自动化测试项目中了.下面重新编辑runtest.py文件 #runtest.py #coding:utf-8 from HTMLTestRunner import HTMLTestRunner from email.mime.text import MIMEText from email.header import Header import smtplib import unittest,time,os #========…
带unittest的脚本分析 #test.py #coding:utf-8 from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import Select from selenium.common.exceptions import N…
一.webdriver原理 webdriver是按照Server-Client的经典设计模式设计的.Server端就是Remote Server,可以是任意的浏览器.当我们的脚本启动浏览器后,该浏览器就是Remote Server,它的职责就是等待Client发送请求并作出响应.Client简单来说就是我们的测试代码,我们测试代码中的一些行为,例如打开浏览器,转跳到特定的URL等操作是以http请求的方式发送给被测试浏览器的,也就是Remote Server.Remote Server接受请求,…
一.窗口截图 WebDriver提供了截图函数get_screenshot_as_file()来截取当前窗口. # -*- coding: utf-8 -*- from selenium import webdriver from time import sleep from selenium.webdriver.common.keys import Keys driver=webdriver.Chrome() driver.get("http://www.baidu.com") dr…
一.处理HTML5的视频播放 大多数浏览器使用控件(如Flash)来播放视频,但是,不同的浏览器需要使用不同的插件.HTML5定义了一个新的元素<video>,指定了一个标准的方式来嵌入电影片段. #test_video.py # -*- coding: utf-8 -*- from selenium import webdriver from time import sleep driver=webdriver.Chrome() driver.get("https://videoj…
 一.调用JavaScript(控制浏览器的滚动条) WebDriver提供了execute_script()方法来执行JavaScript代码.用于调整浏览器滚动条位置的JavaScript代码如下: # -*- coding: utf-8 -*- from selenium import webdriver from time import sleep from selenium.webdriver.common.keys import Keys #访问百度 driver=webdriver…
一.操作cookie 有时候我们需要验证浏览器中cookie是否正确,因为基于真实cookie的测试是无法通过白盒和集成测试的.WebDriver提供了操作Cookie的相关方法,可以读取.添加和删除cookie信息.WebDriver操作cookie的方法:get_cookies(): 获得所有cookie信息get_cookie(name):返回字典的key为“name”的cookie信息add_cookie(cookie_dict):添加cookie,“cookie_dict”指字典对象,…
一.下载文件 webDriver允许设置默认的文件下载路径,也就是说,文件会自动下载并且存放到设置的目录中.下面以火狐浏览器为例,执行文件的下载. #downfile.py # -*- coding: utf-8 -*- from selenium import webdriver from time import sleep profile = webdriver.FirefoxProfile() profile.set_preference('browser.download.dir', '…
一.警告框处理 在WebDriver中处理JavaScript所生成的alert.confirm以及prompt十分简单,只需要使用switch_to_alert()方法定位到alert/confirm/prompt,然后使用text/accept/dismiss/send_keys等方法进行操作.(1)text:返回alert/confirm/prompt中的文字信息(2)accept():接受现有警告框(3)dismiss():解散现有警告框(4)send_keys(KeysToSend):…
一.多窗口切换 在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作.WebDriver提供了switch_to.window()方法.可以实现在不同的窗口之间切换.以百度和百度注册页为例,在两个窗口之间切换 #coding:utf-8 from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver=webdriver.Chr…
一.多表单切换 在web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位.这时就需要通过switch_to_frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中. #frame.html <html> <head> <link href="http://cdn.bootcss.com/bootstrap/3.3.0/…
一.定位一组元素 WebDriver还提供了与前面所对应的8钟用于定位一组元素的方法.定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个S表示复数.定位一组元素一般用于以下场景:(1)批量操作元素,例如勾选页面上所有的复选框.(2)先获取一组元素,再从这组对象中过滤出需要操作的元素.例如定位出页面上所有的CheckBox,然后选择其中的一个进行操作. #checkbox.html <html> <head> <meta http-equi…
一.设置元素等待 若在加载某个元素时延迟而造成的ElementNotVisbleException的情况出现,那么就会降低自动化脚本的稳定性,可以通过设置元素等待改善这种问题造成的不稳定. webdriver提供了两种类型的等待:显示等待和隐示等待 1. 显示等待 显示等待是webdriver等待某个条件成立时继续执行,否则在达到最大时长时抛弃超时异常(TimeoutException). #coding:utf-8 from selenium import webdriver from sel…
一.获得验证信息 通常用的最多的几种验证信息分别是:title.URL和text 运行脚本之后,结果如下图所示: #coding:utf-8 from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver=webdriver.Chrome() driver.get("https://xui.ptlogin2.qq.com/cgi-bin/xlogin?target=…
一.键盘事件 1.Keys()类提供了键盘上几乎所有按键的方法,如下实例: #coding:utf-8 from selenium.webdriver.common.keys import Keys from selenium import webdriver driver=webdriver.Chrome() driver.get("http://www.baidu.com") #输入框中输入内容 driver.find_element_by_id("kw").s…
一.鼠标事件 1. webdriver中,关于鼠标操作的方法封装在ActionChains类中 ActionChains类提供了鼠标操作的常用方法: perform:执行所有ActionChains中存储的行为 context_click():右击 double_click():双击 drag_and_drop():拖动 move_to_element():鼠标悬停 2. 鼠标右击操作 #yunpan.py #coding:utf-8 from selenium.webdriver.common…
一.简单元素操作 1. webdriver中常用的几个方法: clear():清除文本 send_keys(*value):模拟按键输入 click():单击元素 clear()方法用于清除文本输入框中的内容. send_keys()方法模拟键盘向输入框输入内容. click()方法用来单击一个元素,前提是它是可以被单击的对象. 2. webElement接口常用方法:submit()submit()方法用于提交表单.例如:在搜索框输入关键字之后的“回车”操作,就可以通过submit()方法模拟…
一.控制浏览器 1. 控制浏览器窗口大小 webdriver提供了set_window_size()方法来设置浏览器的大小 #test.py #coding:utf-8 from selenium import webdriver driver=webdriver.Chrome() driver.get("http://www.baidu.com") #参数数字为像素点 print("设置浏览器宽480.高800显示") driver.set_window_size…
一.xpath定位 1. 绝对定位 举例用百度输入框和搜索按钮 eg:find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input") eg:find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input") Find_element_by_xpath()方法使用Xpath语言来定位元素,xpat…