前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Selenium对当前浏览器窗口截图

Selenium对当前浏览器窗口截图

作者头像
Altumn
发布2019-10-21 16:50:59
2K0
发布2019-10-21 16:50:59
举报
文章被收录于专栏:软件测试testclass

豆蔻的年华,那些花季雨季,染指,殇逝,是最虚无缥缈的尘埃,吹之即散。

写在前面




在自动化测试中,截图可以帮助我们直观的定位错误、记录测试步骤。 同样,我们可以通过截取关键信息的图片,用以保留测试证迹。WebDriver提供了几种截图函数来截取当前窗口:

get_screenshot_as_file() save_screenshot()

第一种截图方法




代码语言:javascript
复制
#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的图片了。 执行结果如下:

代码语言:javascript
复制
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

生成带时间戳的截图




以上功能实现了当前屏幕窗口截图,但是存在一个弊端:相同路径下生成的图片总会被新的图片覆盖。相同路径下批量生成的图片如何才能不被覆盖呢?这里我们可以通过增加时间戳的方式命名图片。这样不同时间生成的图片就不会被覆盖了。详细实现代码如下所示:

代码语言:javascript
复制
#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()

执行结果如下所示:

代码语言:javascript
复制
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()这两个函数的用法一模一样,详细代码如下所示:

代码语言:javascript
复制
#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()这两个函数的用法一模一样,详细代码如下所示:

代码语言:javascript
复制
#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()

执行结果:

文末彩蛋




如何在生成图片的同时,自动生成对应年月日的文件夹,这样更方便分类和查找图片。其实方法很简单,我们只需要在生成图片之前,先创建一个以”年月日”命名的文件夹,然后把”年月日时分秒”命名的图片放进这个文件夹里面存储。代码如下所示:

代码语言:javascript
复制
#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()

首次执行结果:

代码语言:javascript
复制
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

文件夹已经存在时执行结果:

代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试testclass 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档