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的配合了。今天所述内容,有误的地方,希望大家及时指出,我也及时改正。
学习的一点心得,大家都知道,遇到问题,不要逃避,更不要慌张,慢慢来,沉下心来,多度娘,多看博客,终究会解决的。今天在使用第二种方式优化代码截图的时候,由于没有新建目录的那一步,所以一直截图不成功,后面灵机一动,先给创建一个目录,再运行代码,结果就截图成功了,有点小喜悦。