Python + Selenium操作一:截图详解
在做测试的时候,空口无凭都是白掐,特别是自动化测试的时候,更需要图片来佐证自己发现的问题
话不多说,直接进入主题,技术就是这么直白
Webdriver自带截图功能,get_screenshot_as_file(),save_screenshot(),使用起来还是蛮方便的
截图一:get_screenshot_as_file()
截图二:save_screenshot()
get_screenshot_as_file()方式
该方式很简单,通过driver获取该方法,将截图要保存的路径写入就好,先看一张图,没运行代码的时候,Picture目录下还没有名为baidu.png的图片,建个Picture目录,是为了方便管理截图的图片
接下来运行代码,保存的图片如下:
可以看到,图片是截图成功了的,在对应文件夹下也是可以看到图片的,代码如下:
# coding=utf-8
from selenium import webdriver
import time driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maximize_window()
time.sleep(2)
try:
picture_url=driver.get_screenshot_as_file('G:\\201801-\\python_code\\Demo\\Picture\\baidu.png')
print("%s:截图成功!!!" % picture_url)
except BaseException as msg:
print(msg)
driver.quit()
这里需要注意的是,文件存放的路径一定要正确,路径中的\\双斜杠,有一个是转义符,这个就不多说了
这种方式写法太过于死板,这样运行下去,图片名字会重名,达不到什么好效果,可以生成代码运行的当前时间,来做为图片名,这样就不会再出现该问题了,修改代码如下:
# coding=utf-8
from selenium import webdriver
import time driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maximize_window()
time.sleep(2)
picture_time = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
print(picture_time)
try:
picture_url=driver.get_screenshot_as_file('G:\\201801-\\python_code\\Demo\\Picture\\'+ picture_time +'.png')
print("%s:截图成功!!!" % picture_url)
except BaseException as msg:
print(msg)
driver.quit()
代码运行后,查看截图的效果,如下:
该方法使用起来更加方便,算是一个小小优化
save_screenshot()方式
save_screenshot()与get_screenshot_as_file()方式都是一样,先看一个小例子,代码如下:
# 截图方式二
# coding=utf-8
from selenium import webdriver
import time driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maximize_window()
time.sleep(2)
try:
picture_url=driver.save_screenshot('.\\baidu1.png')
print("%s :截图成功!!!" % picture_url)
except BaseException as msg:
print("%s :截图失败!!!" % msg)
driver.quit()
运行该代码后,在当前目录下会保存成功一张名为baidu1.png的图片,如下:
一种方式学会,另一种是不是很简单了,接下来以这种截图方式,来做个优化吧,先看代码:
# 截图方式二
# coding=utf-8
from selenium import webdriver
import os
import time
# 生成年月日时分秒时间
picture_time = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
directory_time = time.strftime("%Y-%m-%d", time.localtime(time.time()))
print(picture_time)
print(directory_time)
# 打印文件目录
print(os.getcwd())
# 获取到当前文件的目录,并检查是否有 directory_time 文件夹,如果不存在则自动新建 directory_time 文件
try:
File_Path = os.getcwd() + '\\' + directory_time + '\\'
if not os.path.exists(File_Path):
os.makedirs(File_Path)
print("目录新建成功:%s" % File_Path)
else:
print("目录已存在!!!")
except BaseException as msg:
print("新建目录失败:%s" % msg) driver = webdriver.Chrome()
driver.get("https://baidu.com/")
try:
url=driver.save_screenshot('.\\' + directory_time + '\\' + picture_time + '.png')
print("%s :截图成功!!!" % url)
except BaseException as pic_msg:
print("截图失败:%s" % pic_msg)
time.sleep(2)
driver.quit()
该代码的优化,是自动创建日期目录,并将截取的图片以年月日时分秒命名保存在当前日期目录下,这样就能很方便的查看图片保存路径,也方便管理自己的测试图片
运行代码,我们来查看结果,如下:
这样运行代码后,就自动生成了名为2018-09-16的文件夹,截取的图片命名为2018-09-16-16_14_18.png,并保存在2018-09-16的文件夹下,如果明天运行该代码,就会生成新的文件夹,并命名为2018-09-17,这样就很好的区分了图片日期来源,如果再次运行该代码,就会提示文件夹已存在,图片依然截取成功,如下:
好了,这就是今天的截图内容了,还有可优化的地方,比如,截取指定大小的图片,截取元素的图片,如果页面很长,单单使用该两种方式是截取不全的,这就需要使用JS的配合了。今天所述内容,有误的地方,希望大家及时指出,我也及时改正。
学习的一点心得,大家都知道,遇到问题,不要逃避,更不要慌张,慢慢来,沉下心来,多度娘,多看博客,终究会解决的。今天在使用第二种方式优化代码截图的时候,由于没有新建目录的那一步,所以一直截图不成功,后面灵机一动,先给创建一个目录,再运行代码,结果就截图成功了,有点小喜悦。
Python + Selenium操作一:截图详解的更多相关文章
- [转]使用python来操作redis用法详解
转自:使用python来操作redis用法详解 class CommRedisBase(): def __init__(self): REDIS_CONF = {} connection_pool = ...
- Python API 操作Hadoop hdfs详解
1:安装 由于是windows环境(linux其实也一样),只要有pip或者setup_install安装起来都是很方便的 >pip install hdfs 2:Client——创建集群连接 ...
- 使用python来操作redis用法详解
1.redis连接 redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRe ...
- 基于Python Selenium Unittest PO设计模式详解
本文章会讲述以下几个内容: 1.什么是PO设计模式(Page Object Model) 2.为什么要使用PO设计模式 3.使用PO设计模式要点 4.PO设计模式实例 1.什么是PO设计模式 (Pag ...
- Python 文件操作模块 shutil 详解
1.导入模块 shutil import shutil 2.shutil方法 2.1 shutil.copy(src,dst) //将 src 复制到 dst 保留文件权限 例:将Alan复制到 ...
- python操作redis用法详解
python操作redis用法详解 转载地址 1.redis连接 redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用 ...
- 《手把手教你》系列技巧篇(二十九)-java+ selenium自动化测试- Actions的相关操作上篇(详解教程)
1.简介 有些测试场景或者事件,Selenium根本就没有直接提供方法去操作,而且也不可能把各种测试场景都全面覆盖提供方法去操作.比如:就像鼠标悬停,一般测试场景鼠标悬停分两种常见,一种是鼠标悬停在某 ...
- 《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)
1.简介 本文主要介绍两个在测试过程中可能会用到的功能:Actions类中的拖拽操作和Actions类中的划取字段操作.例如:需要在一堆log字符中随机划取一段文字,然后右键选择摘取功能. 2.拖拽操 ...
- 《手把手教你》系列技巧篇(三十三)-java+ selenium自动化测试-单选和多选按钮操作-上篇(详解教程)
1.简介 在实际自动化测试过程中,我们同样也避免不了会遇到单选和多选的测试,特别是调查问卷或者是答题系统中会经常碰到.因此宏哥在这里直接分享和介绍一下,希望小伙伴或者童鞋们在以后工作中遇到可以有所帮助 ...
- 《手把手教你》系列技巧篇(三十四)-java+ selenium自动化测试-单选和多选按钮操作-中篇(详解教程)
1.简介 今天这一篇宏哥主要是讲解一下,如何使用list容器来遍历单选按钮.大致两部分内容:一部分是宏哥在本地弄的一个小demo,另一部分,宏哥是利用JQueryUI网站里的单选按钮进行实战. 2.d ...
随机推荐
- gflags命令行参数解析
gflags库是google开源的命令行参数解析工具. 安装 官方没有提供二进制库,但是Debian/Ubuntu平台本身提供了二进制库,可以直接git clone https://github.co ...
- 原生JS给元素添加class属性
有下面这三种简单语句. document.getElementsByTagName('body')[0].className = 'snow-container'; //设置为新的 document ...
- 2017/05/04 java 基础 随笔
1.java变量在使用之前必须初始化 int a; a=10 ; int b; 没有初始化,也没有使用也不报错 2.强制类型转换 int a=8: byte b=6; b=(byte)(a+b); ...
- ubuntu “下列的软件包有不能满足的依赖关系” 问题
前阵子,刚安装Ubuntu时,安装vim的问题,现在些出来分享一下. apt-get install vim 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 ...
- 【vim】删除标记内部的文字 di[标记]
当我开始使用 Vim 时,一件我总是想很方便做的事情是如何轻松的删除方括号或圆括号里的内容.转到开始的标记,然后使用下面的语法: di[标记] 比如,把光标放在开始的圆括号上,使用下面的命令来删除圆括 ...
- linux内核驱动中对字符串的操作【转】
转自:http://www.360doc.com/content/12/1224/10/3478092_255969530.shtml Linux内核中关于字符串的相关操作,首先包含头文件: #inc ...
- OA协同办公软件
OA协同办公软件: 泛微软件. 九思软件. 华天动力. 万户OA.:北京万户网络技术有限公司创立于1998年2月,是北京华宇软件股份有限公司(股票简称:“华宇软件”,股票代码:300271)的全资子公 ...
- php- post表单 input name属性的问题
<input type='text' style='width: 99px' name='deptNo'></td> name为字符串的时候传递的是单个字符串 <inp ...
- 利用pyecharts做地图数据展示
首先, pip install pyecharts 为了地图上的数据能显示完全,加载好需要的城市地理坐标数据. pip install echarts-countries-pypkg pip inst ...
- xshell xftp免费版下载方法
第一步:进入官网 https://www.netsarang.com/ 第二步:选中Free License 第三步:选中你要下的xftp或者xsell (l两个好像不能一块下,都要单独操作) 第四步 ...