zoukankan      html  css  js  c++  java
  • 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的配合了。今天所述内容,有误的地方,希望大家及时指出,我也及时改正。

    学习的一点心得,大家都知道,遇到问题,不要逃避,更不要慌张,慢慢来,沉下心来,多度娘,多看博客,终究会解决的。今天在使用第二种方式优化代码截图的时候,由于没有新建目录的那一步,所以一直截图不成功,后面灵机一动,先给创建一个目录,再运行代码,结果就截图成功了,有点小喜悦。

  • 相关阅读:
    NSCharacterSet 最经常使用的使用方法
    IOS
    hdu 3117 Fibonacci Numbers
    Hibernate5配置与使用具体解释
    SDNU 1206.蚂蚁感冒 【代码如此简单,思维练习】【7月29】
    2048游戏分析、讨论与扩展
    hash_set和hash_map
    实现邮箱找回的思路分析
    学习OpenCV——粒子滤波(网上两篇文章总结)
    学习OpenCV——配置CUDA环境
  • 原文地址:https://www.cnblogs.com/hong-fithing/p/9656221.html
Copyright © 2011-2022 走看看