[Selenium][Notes]Day7:9️⃣屏幕截图

281 阅读2分钟

Background

通常在执行自动化用例的时候,是不会一直在旁边检测,报错的时候想要留下一些证据,可以在代码中进行添加截图操作,通过截图把想要的内容截图下来。

方法一:get_screenshot_as_file(filename)

获取当前屏幕截图: get_screenshot_as_file(filename),filename为图片名称,需要填写完整路径。

注意: 图片后缀只能是png,如果是jpg或者其他格式的话,会报错,但是程序还是回正常执行。

self.driver.get_screenshot_as_file('123.png')

方法二:get_screenshot_as_base64()

获取当前屏幕截图,保存格式为base64,base64保存的图片多数用来放入html报告中。需要导入base64模块,使用base64模块展示图片

from selenium import webdriver
import time
import base64

class TestCase(object):
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get('http://www.baidu.com')

    def test(self):
        # 通过base64进行保存图片
        b64 = self.driver.get_screenshot_as_base64()
        image = base64.b64decode(b64)
        file = open('baidu.jpg', "wb")
        file.write(image)
        self.driver.quit()

方法三:save_screenshot(filename)

获取当前窗口屏幕截图的截图。

self.driver.save_screenshot('baidu.png')

方法四:get_screenshot_as_png()

以二进制的方式进行获取当前屏幕截图。

# 通过二进制的方法进行保存图片到本地
x = self.driver.get_screenshot_as_png()
file = open('xxx.png', "wb")
file.write(x)
self.driver.quit()

异常捕捉

通常错误截图大多数用在用例执行失败的时候,通过异常捕捉进行截取图片内容。

except Exception as msg:
    print("异常原因", msg)
    # 时间戳名称,防止覆盖
    st = strftime("%Y-%m-%d-%H-%M-%S", localtime(time()))
    file_name = st + '.png'
    # 异常截图保存在本地
    self.driver.get_screenshot_as_file(file_name)

实例Code:

from selenium import webdriver
from time import sleep, localtime, strftime, time
import base64
import os

class TestCase(object):
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.get('http://www.baidu.com')

    def test(self):
        self.driver.find_element_by_id('kw').send_keys('Github')
        self.driver.find_element_by_id('su').click()
        sleep(4)
        # 保存截屏-直接命名
        # self.driver.save_screenshot('baidu.png')

        # 保存截屏-时间格式命名
        st = strftime("%Y-%m-%d-%H-%M-%S", localtime(time()))
        file_name = st + '.png'
        self.driver.save_screenshot(file_name)

    def test2(self):
        # 获取当前屏幕截图
        st = strftime("%Y-%m-%d-%H-%M-%S", localtime(time()))
        file_name = st + '.png'
        path = os.path.abspath('screenshot')
        file_path = path + '/' + file_name
        self.driver.get_screenshot_as_file(file_path)
        self.driver.quit()

    def test3(self):
        # 通过base64进行保存图片
        b64 = self.driver.get_screenshot_as_base64()
        image = base64.b64decode(b64)
        file = open('1.jpg', "wb")
        file.write(image)
        self.driver.quit()

    def test4(self):
        # 通过二进制的方法进行保存图片到本地
        x = self.driver.get_screenshot_as_png()
        file = open('xxx.png', "wb")
        file.write(x)
        self.driver.quit()

    def test4(self):
        # 异常处理截图
        try:
            # 定位元素错误
            self.driver.find_element_by_id('ka').send_keys('Github')
            print('Pass')
            self.driver.quit()
        except Exception as msg:
            print("异常原因", msg)
            # 时间戳名称,防止覆盖
            st = strftime("%Y-%m-%d-%H-%M-%S", localtime(time()))
            file_name = st + '.png'
            # 异常截图保存在本地
            self.driver.get_screenshot_as_file(file_name)

if __name__ == '__main__':
    case = TestCase()
    # case.test1()
    # case.test2()
    # case.test3()
    case.test4()