selenium2 python自动化测试实战 最近接手商城的项目,针对后台测试,功能比较简单,但是流程比较繁多,涉及到前后台的交叉测试.在对整个项目进行第一轮测试完成之后,考虑以后回归测试任务比较重,为了减轻回归测试的工作量,所以考虑后台可以进行部分自动化测试. 之前一个项目使用robotframework进行回归测试,了解了python语言,所以这次就使用python2.7+selenium2进行自动化回归测试了. 配置环境 python2.7 运行工具pycharm2017 一.项目结构介…
有很多selenium的教程,你没有从头看,当你看的时候已经很难跟上作者的节奏了.现在,你有机会再从头学一次了.从今天开始,船长会从最基本的知识开始,和大家一起学selenium.能不能跟着一起就看大家了.我们是按照虫师的书<selenium2 python 自动化测试实战>写的,没错,我看了多少,就会在这里和大家分享多少.还是老规矩,不明白的可以留言,现在有五六个人加了我好友,船长也尽力给大家解决问题了.还有要谢谢@川小姐姐的赞赏,你是第一个真正赞赏的,哈哈,谢谢! 好今天我们来第一课,搭建…
看代码: # coding: utf-8 from selenium import webdriver from time import sleep driver = webdriver.Firefox() driver.get("https://www.cnblogs.com") driver.add_cookie({'name': '.CNBlogsCookie', 'value': 'F956F323DFA5C31BE489C0730C7D891', 'domain': '.cn…
前言 文件上传是web页面上很常见的一个功能,自动化成功中操作起来却不是那么简单. 一般分两个场景:一种是input标签,这种可以用selenium提供的send_keys()方法轻松解决: 另外一种非input标签实现起来比较困难,可以借助autoit工具或者SendKeys第三方库. 本篇以博客园的上传图片为案例,通过send_keys()方法解决文件上传问题 一.识别上传按钮 1.点开博客园编辑器里的图片上传按钮,弹出”上传本地图片”框. 2.用firebug查看按钮属性,这种上传图片按钮…
前言 文件上传是web页面上很常见的一个功能,自动化成功中操作起来却不是那么简单. 一般分两个场景:一种是input标签,这种可以用selenium提供的send_keys()方法轻松解决: 另外一种非input标签实现起来比较困难,可以借助autoit工具或者SendKeys第三方库. 本篇以博客园的上传图片为案例,通过send_keys()方法解决文件上传问题 一.识别上传按钮 1.点开博客园编辑器里的图片上传按钮,弹出”上传本地图片”框. 2.用firebug查看按钮属性,这种上传图片按钮…
并发上传 基于py自带模块 concurrent.futures import ThreadPoolExecutor #!/usr/bin/env python3 # -*- coding:utf-8 -*- # @Time: 2020/11/22 10:13 # @Author:zhangmingda # @File: ks3_multi_thread_for_concurrent.futures.ThreadPoolExecutor.py # @Software: PyCharm # Des…
前言 近日,在做接口测试时遇到一个奇葩的问题. 使用post请求直接通过接口上传文件,无法识别文件. 遇到的问题 以下是抓包得到的信息: 以上请求是通过Postman直接发送请求的. 在这里可以看到消息头里包含:Access-Token和Content-Type 因此在在使用python直接调用此接口时,传入的Headers也是包含这两个值的: def send_app_logo(token, appid): url = "XXXXXXXXX" headers = { "Ac…
上传 代码示例: #!/usr/bin/python # -*- coding:utf-8 -*- from ftplib import FTP ftp = FTP() # 打开调试级别2, 显示详细信息 ftp.set_debuglevel(2) # 服务器IP和端口 ftp.connect("192.168.10.2", "21") # 匿名登陆, 如果需要登陆, 就把两个空字符串写上用户名和密码就行了("username", "p…
使用urllib2模块构造http post数据结构,提交有文件的表单(multipart/form-data),本示例提交的post表单带有两个参数及一张图片,代码如下: #buld post body data boundary = '----------%s' % hex(int(time.time() * 1000)) data = [] data.append('--%s' % boundary) data.append('Content-Disposition: form-data;…
要想上传文件,需要找到在HTML中<input type="file" />这个标签,有它就可以利用send_keys上传文件,不过这里的<input>元素被隐藏了,导致一直定位不到input html代码如下,注意visibility:hidden,表示这个input元素被隐藏了,要想定位它必须先把隐藏属性去掉 一般控制元素显示或隐藏是用display属性来实现的 style.display = "none",表示元素隐藏; style.d…
需要准备文件 http://pan.baidu.com/s/1bp4N3nL   qqi0 html <script src="{% static 'js/jquery.js' %}"></script> <script src="{% static 'js/ajaxfileupload.js' %}"></script> <form class="form-horizontal" actio…
1.基础版(供学习了解原理使用,low) server服务端 import socket import struct import json server = socket.socket() ip_port = ('127.0.0.1', 8001) server.bind(ip_port) server.listen() conn, addr = server.accept() head_len_msg = conn.recv(4) head_len = struct.unpack('i',h…
请求数据示例: ------WebKitFormBoundaryKLoWgrA4O40MayHM Content-Disposition: form-data; name="id" 9 ------WebKitFormBoundaryKLoWgrA4O40MayHM Content-Disposition: form-data; name="name" 赵云 ------WebKitFormBoundaryKLoWgrA4O40MayHM Content-Dispo…
说下载文件之前,我再和大家说一下用cookie登录的事,既然我们用cookie登录,那么传过去的cookie肯定是要和对应的网站完全一致的,注意,是包括大小写哦,本来我也是不知道,我用这个方法登录自己公司的网站,fiddler抓包和代码如下: # coding: utf-8 from selenium import webdriverfrom time import sleep driver = webdriver.Firefox() driver.get("https://www.yiyao.…
本人在网上查找了很多做自动化的教程和实例,偶然的一个机会接触到了selenium,觉得非常好用.后来就在网上查阅各种selenium的教程,但是网上的东西真的是太多了,以至于很多东西参考完后无法系统的学习和应用,有一次在网上随意搜索,找到了-虫师-写的<Selenium2自动化测试实战基于Python语言>,觉得真心不错,内容也很调理,为了方便自己学习和知识的整理,就把其中虫师编写的自动化项目教程整理一下,有兴趣的可以去参看虫师的博客http://www.cnblogs.com/fnng/ 以…
鼠标事件包含在ActionChains类中,导入时只需要: from selenium.webdriver.common.action_chains import ActionChains 导入类即可: 常用的方法有: context_click()  ——右键单击 double_click()  ——双击 drag_and_drop(鼠标按下的元素,鼠标释放的元素)  ——拖动 move_to_element()  ——鼠标悬停在一个元素上 click_and_hold()  ——按下鼠标左键…
我们来看一段最早的代码: # coding: utf-8 from selenium import webdriverfrom time import sleep driver = webdriver.Firefox() driver.get("http://blog.hexun.com/") driver.find_element_by_id("read_btn").click() driver.maximize_window() sleep(3)driver.f…
浏览器操作 # coding: utf-8 from selenium import webdriver from time import sleep driver = webdriver.Firefox() driver.get("https://www.baidu.com") # 设置浏览器宽800,高400 driver.set_window_size(800, 400) sleep(3) # 最大化窗口 driver.maximize_window() driver.get(&…
一:接口测试过程中GET请求与POST请求的主要区别 从开发角度我们看get与post的主要区别是:1.Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据:2.Get安全性比Post低:Get将表单中数据的按照key=value的形式,添加到action(动作或者说操作)所指向的url后面,并且两者使用“?”连接,而各个变量之间使用 “&”连接:Post是将表单中的数据放在form的数据体中,按照键值对方式,传递到action所指向url:3.Post传输的数据量大,可以达到2M…
unittest是展开自动化测试的基础——这个框架很重要! 我们先自己写一个测试类: 1.被测试类 Widthget.py: # coding: utf-8 class Widthget:    def __init__(self, size=(10, 10)):        self._size = size    def getSize(self):        return self._size        def reSize(self, width, height):      …
定位一组对象 定位一组对象——find_elements_by_...(),注意,这里是elements,复数.返回的结果是一个列表,我们取值的时候就要用列表取值的方式来获得自己想要的元素.需要注意的就这么多.看一段代码立刻明白: 这是百度右上角的几个标签.我们看到,从“新闻”到“学术”的class是相同的: # coding: utf-8from selenium import webdriver driver = webdriver.Firefox() driver.get("http://…
打印信息经常用的有两个: # coding: utf-8 from selenium import webdriver driver = webdriver.Firefox() driver.get("http://www.baidu.com")# 打印网页标题title = driver.titleprint title# 打印当前urlcurr = driver.current_urlprint curr 打印显示为: 我们打印这些东西不是为了给自己看,而是为了做断言用,我们知道,…
键盘事件,就是键盘上的一些操作,比如Ctrl +C,Ctrl+V,Ctrl+X等. 对键盘的操作需要导入另一个键盘的库: from selenium.webdriver.common.keys import Keys 举个例子,你要在搜索框输入“自动化测试”,但是现在又想搜“自动化测”,就是删掉一个字,我们知道,就是摁一下键盘上的Backspace键就可以了,这时候你就需要键盘操作了: driver.find_element_by_xpath("xpath的定位").send_keys…
上一节我们说了如何定位元素,定位到元素以后就涉及到对元素的操作了,webdriver中常用的操作元素的方法有: clear  ——用于清除输入框的默认内容 send_keys  ——用于在一个输入框里输入内容 click  ——用于单点击一个按钮 此外,很多时候我们是要查看返回值的,常用的方法有: size  ——返回元素的尺寸用法: driver.find_element_by_id("定位的id").size text  ——获取元素的文本用法: driver.find_eleme…
(一)Selenium IDE Firefox的一个插件,有助于我们理解测试框架.在附加组件里搜索下载,一般搜的结果里前几个都不是,得点那个查看更多才行,找到这个: 安装以后浏览器工具栏会有: 安装好了以后点击这个标签启动: 1:控制用例运行速度 2:暂停和恢复用例执行 3:单步:可以运行一个用例中的一行命令. 先在地址栏输入要录制的url,然后在浏览器进入相应的url,比如我们以百度为例: 第一步:填入url 第二步:火狐浏览器进入百度 第三步: 点击Selenium IDE右侧那个红点,然后…
webdriver 提供错误截图函数 get_screenshot_as_file(),可以帮助我们跟踪 bug,在脚本无法继续执行时候, get_screenshot_as_file()函数将截取当前页面的截图保存到指定的位置 # coding: utf-8 from selenium import webdriverfrom time import sleep d = webdriver.Firefox() d.get("https://www.baidu.com") sleep(…
线性测试 已经被淘汰了:线性测试就是一个脚本完成一个场景,代码基本没有复用,每一个脚本都要从头开始写——这哪行. 模块化与类库 这个就是分模块:有点类似面系那个对象,把功能(比如登录)单独拿出来,当下次用到这个功能的时候只需要调用(登录)模块即可. 提高开发效率 方便代码维护 数据驱动 数据与脚本分离——参数化. 关键字驱动 看过我的robot Framework了吧,那个就是关键字驱动,“关键字”其实就是把函数封装成关键字,用的时候直接把这个封装好的关键字拿过来用就OK了.其实和数据驱动差不多…
看代码: # coding=utf-8 from time import sleepfrom selenium import webdriver driver = webdriver.Firefox() driver.maximize_window() driver.implicitly_wait(6) driver.get("https://tieba.baidu.com/index.html") sleep(1)# 用目标元素参考去拖动target_elem = driver.fi…
js修改readonly属性 我们看到这里日期框标签中有readonly属性,如果我们直接send_keys就无法输入内容,这时我们需要先去掉readonly属性: js ='document.getElementById("train_start_date").removeAttribute("readonly")'driver.execute_script(js) 然后可能需要清空一下文本框,然后用send_keys填入我们想填的内容即可,或者继续用js写入:…
之前我们已经学过利用cookies跳过验证码登录了,那时候我们用的方法是add_cookie()方法,这里再给大家介绍两个,一般情况下我们用不到,了解一下就可以,而且如果真的用到的时候百度也很快的: # coding: utf-8 from selenium import webdriverfrom time import sleep d = webdriver.Firefox() d.get("https://www.yiyao.cc")# 看一下登录前的cookieprint d.…