豆蔻的年华,那些花季雨季,染指,殇逝,是最虚无缥缈的尘埃,吹之即散。
”
写在前面
在自动化测试中,截图可以帮助我们直观的定位错误、记录测试步骤。 同样,我们可以通过截取关键信息的图片,用以保留测试证迹。WebDriver提供了几种截图函数来截取当前窗口:
get_screenshot_as_file()
save_screenshot()
第一种截图方法
#select.py
#www.testclass.cn
#Altumn
import time
from selenium import webdriverdriver=webdriver.Chrome()
driver.implicitly_wait(5)
driver.maximize_window()
driver.get("https://www.testclass.cn")
#调用driver.get_screenshot_as_file(filename)方法,对当前浏览器打开界面进行截图;
并保存到D盘下,命名为:testclass.png
filename ="D:\\testclass.png"
try:
picture=driver.get_screenshot_as_file(filename)
if picture == True:
print (picture,":截图成功!图片保存路径为:",filename)
else:
print(picture,":截图失败!")
except Exception as e:
print(e)driver.quit()
调用截屏函数get_screenshot_as_file()截图成功会返回True,如果发生IOError异常则返回False。图片存放的路径可以是绝对路径,也可以是相对路径。脚本运行完成后打开D盘,就可以找到命名为testclass.png的图片了。 执行结果如下:
DevTools listening on ws://127.0.0.1:12910/devtools/browser/5b50fb75-2b5c-4a50-a6a0-4b0918e4410e
True :截图成功!图片保存路径为: D:\testclass.png
PS C:\Users\WangXiao\Desktop\python> cd 'c:\Users\WangXiao\Desktop\python'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:\Users\WangXiao\AppData\Local\Programs\Python\Python36\python.exe' 'c:\Users\WangXiao\.vscode\extensions\ms-python.python-2018.12.1\pythonFiles\ptvsd_launcher.py' '--default' '--client' '--host' 'localhost' '--port' '62091' 'c:\Users\WangXiao\Desktop\python\screen_capture.py'
DevTools listening on ws://127.0.0.1:12371/devtools/browser/bc26207b-e918-4400-86ca-c12c48edcbee
True :截图成功!图片保存路径为: D:\testclass.png
生成带时间戳的截图
以上功能实现了当前屏幕窗口截图,但是存在一个弊端:相同路径下生成的图片总会被新的图片覆盖。相同路径下批量生成的图片如何才能不被覆盖呢?这里我们可以通过增加时间戳的方式命名图片。这样不同时间生成的图片就不会被覆盖了。详细实现代码如下所示:
#select.py
#www.testclass.cn
#Altumn
import time
from selenium import webdriverdriver=webdriver.Chrome()
driver.implicitly_wait(5)
driver.maximize_window()
driver.get("https://www.testclass.cn")
#生成时间戳;
picture_time = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
print(picture_time)
#调用driver.get_screenshot_as_file(filename)方法,对当前浏览器打开界面进行截图;
并保存到D盘下,命名为:"当前时间".png
filename ="D:\\" + picture_time +".png"
try:
picture=driver.get_screenshot_as_file(filename)
if picture == True:
print (picture,":截图成功!图片保存路径为:",filename)
else:
print(picture,":截图失败!")
except Exception as e:
print(e)driver.quit()
执行结果如下所示:
PS C:\Users\WangXiao\Desktop\python> cd 'c:\Users\WangXiao\Desktop\python'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:\Users\WangXiao\AppData\Local\Programs\Python\Python36\python.exe' 'c:\Users\WangXiao\.vscode\extensions\ms-python.python-2018.12.1\pythonFiles\ptvsd_launcher.py' '--default' '--client' '--host' 'localhost' '--port' '51578' 'c:\Users\WangXiao\Desktop\python\screen_capture.py'
DevTools listening on ws://127.0.0.1:12781/devtools/browser/976c71cb-1d9b-4b8c-b10d-5981ced1a9e52019-01-24-15:08:56
False :截图失败!
PS C:\Users\WangXiao\Desktop\python> cd 'c:\Users\WangXiao\Desktop\python'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:\Users\WangXiao\AppData\Local\Programs\Python\Python36\python.exe' 'c:\Users\WangXiao\.vscode\extensions\ms-python.python-2018.12.1\pythonFiles\ptvsd_launcher.py' '--default' '--client' '--host' 'localhost' '--port' '52768' 'c:\Users\WangXiao\Desktop\python\screen_capture.py'
DevTools listening on ws://127.0.0.1:12711/devtools/browser/d0bc9d1b-eb4f-486b-ba70-54758eaca5f02019-01-24-15_22_27
True :截图成功!图片保存路径为: D:\2019-01-24-15_22_27.png
第二种截图方法
get_screenshot_as_file()
save_screenshot()
这两个函数的用法一模一样,详细代码如下所示:
#select.py
#www.testclass.cn
#Altumn
import time
from selenium import webdriverdriver=webdriver.Chrome()
driver.implicitly_wait(5)
driver.maximize_window()
driver.get("https://www.testclass.cn")
#调用driver.save_screenshot(filename)方法,对当前浏览器打开界面进行截图;
并保存到D盘下,命名为:testclass.png
filename ="D:\\testclass.png"
try:
picture=driver.save_screenshot(filename)
if picture == True:
print (picture,":截图成功!图片保存路径为:",filename)
else:
print(picture,":截图失败!")
except Exception as e:
print(e)driver.quit()
执行结果:
生成带时间戳的截图
get_screenshot_as_file()
save_screenshot()
这两个函数的用法一模一样,详细代码如下所示:
#select.py
#www.testclass.cn
#Altumn
import time
from selenium import webdriverdriver=webdriver.Chrome()
driver.implicitly_wait(5)
driver.maximize_window()
driver.get("https://www.testclass.cn")
#生成时间戳;
picture_time = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
print(picture_time)
#调用driver.save_screenshot(filename)方法,对当前浏览器打开界面进行截图;
并保存到D盘下,命名为:"当前时间".png
filename ="D:\\" + picture_time +".png"
try:
picture=driver.save_screenshot(filename)
if picture == True:
print (picture,":截图成功!图片保存路径为:",filename)
else:
print(picture,":截图失败!")
except Exception as e:
print(e)driver.quit()
执行结果:
文末彩蛋
如何在生成图片的同时,自动生成对应年月日的文件夹,这样更方便分类和查找图片。其实方法很简单,我们只需要在生成图片之前,先创建一个以”年月日”命名的文件夹,然后把”年月日时分秒”命名的图片放进这个文件夹里面存储。代码如下所示:
#select.py
#www.testclass.cn
#Altumn
import os
import time
from selenium import webdriverdriver=webdriver.Chrome()
driver.implicitly_wait(5)
driver.maximize_window()
driver.get("https://www.testclass.cn")
#生成文件夹时间戳;
file_time = time.strftime("%Y-%m-%d", time.localtime(time.time()))
print("文件夹名称:",file_time)
#生成图片时间戳;图片以年月日时分秒命名;
picture_time = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
print("图片名称:",picture_time)
#在这里,我想把图片保存在D盘,所以我先把python默认的工作目录修改一下;os.chdir('D:\\')
result = os.getcwd()
#打印一下修改后当前python的工作目录;
print(result)
#生成文件夹:先检查对应的的路径下是否已存在文件夹,不存在则自动新建 file_time 文件夹;
try:
File_Path = os.getcwd() + file_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.get_screenshot_as_file(filename)方法,对当前浏览器打开界面进行截图;
并保存到D盘下,命名为:testclass.png
filename ="D:\\" + file_time + "\\" + picture_time +".png"
try:
picture=driver.get_screenshot_as_file(filename)
if picture == True:
print (picture,":截图成功!图片保存路径为:",filename)
else:
print(picture,":截图失败!")
except Exception as e:
print(e)driver.quit()
首次执行结果:
PS C:\Users\WangXiao\Desktop\python> cd 'c:\Users\WangXiao\Desktop\python'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:\Users\WangXiao\AppData\Local\Prog'; ${env:PYTHONUNBUFFERED}='1'; & 'C:\Users\WangXiao\AppData\Local\Programs\Python\Python36\python.exe' 'cles\ptvsd_launcher.py' '--default' '--client' '--host' 'localhost' '--p:\Users\WangXiao\.vscode\extensions\ms-python.python-2018.12.1\pythonFiles\ptvsd_launcher.py' '--default''--client' '--host' 'localhost' '--port' '57682' 'c:\Users\WangXiao\Desktop\python\screen_capture.py'
DevTools listening on ws://127.0.0.1:12533/devtools/browser/76bd24d9-5fc4-400a-b1d8-59e3c2908b42
文件夹名称: 2019-01-24
图片名称: 2019-01-24-16_49_15
D:\
目录新建成功:D:\2019-01-24\
True :截图成功!图片保存路径为:
D:\2019-01-24\2019-01-24-16_49_15.png
文件夹已经存在时执行结果:
PS C:\Users\WangXiao\Desktop\python> cd 'c:\Users\WangXiao\Desktop\python'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:\Users\WangXiao\AppData\Local\Programs\Python\Python36\python.exe' 'c:\Users\WangXiao\.vscode\extensions\ms-python.python-2018.12.1\pythonFiles\ptvsd_launcher.py' '--default''--client' '--host' 'localhost' '--port' '58116' 'c:\Users\WangXiao\Desktop\python\screen_capture.py'
DevTools listening on ws://127.0.0.1:12985/devtools/browser/ce22980d-225e-4a73-ae4e-944ce3134f54
文件夹名称: 2019-01-24
图片名称: 2019-01-24-16_53_52
D:\
目录已存在!
True :截图成功!图片保存路径为: D:\2019-01-24\2019-01-24-16_53_52.png
本文分享自 软件测试testclass 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!