Selenium对当前浏览器窗口截图
写在前面
在自动化测试中,截图可以帮助我们直观的定位错误、记录测试步骤。 同样,我们可以通过截取关键信息的图片,用以保留测试证迹。WebDriver提供了几种截图函数来截取当前窗口:get_screenshot_as_file()
和save_screenshot()
。
第一种截图方法
#select.py #www.testclass.cn #Altumn import time from selenium import webdriver driver=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 webdriver driver=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-5981ced1a9e5 2019-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-54758eaca5f0 2019-01-24-15_22_27 True :截图成功!图片保存路径为: D:\2019-01-24-15_22_27.png
第二种截图方法
save_screenshot()
和get_screenshot_as_file()
的用法一模一样,代码如下:
#select.py #www.testclass.cn #Altumn import time from selenium import webdriver driver=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()
执行结果:
生成带时间戳的截图
save_screenshot()
和get_screenshot_as_file()
的用法一模一样,代码如下:
#select.py #www.testclass.cn #Altumn import time from selenium import webdriver driver=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 webdriver driver=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
作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可
文章评论(4)
我去试试看这个截图功能
写的很详细
自动化测试学习交流群:670250199
👍 👍 👍