• Selenium3 + Python3自动化测试系列十二——窗口截图与关闭浏览器


    窗口截图

      自动化用例是由程序去执行的,因此有时候打印的错误信息并不十分明确。如果在脚本执行出错的时候能对当前窗口截图保存,那么通过图片就可以非常直观地看出出错的原因。WebDriver提供了截图函数get_screenshot_as_file()、save_screenshot()、get_screenshot_as_png、get_screenshot_as_base64四种方法来截取当前窗口。

    get_screenshot_as_file()

       该方式很简单,通过driver获取该方法,将截图要保存的路径写入就好,首先建立一个Picture文件夹目录,为了方便存储管理截图的图片。代码如下:

    from selenium.webdriver import Chrome
    from time import sleep
    
    # 访问百度
    driver = Chrome("C:Program Files (x86)GoogleChromeApplicationchromedriver.exe")
    driver.get("https://www.baidu.com/")
    
    driver.find_element_by_id("kw").send_keys("selenium")
    sleep(2)
    # 保存图片至文件夹中 driver.get_screenshot_as_file("D:\PythonProject\Test\Picture\baidu.jpg") driver.quit()

      当我们运行上述程序时,我们发现有一个Warning警告,告诉我们建议保存图片时用”.png“格式保存,但不影响正常流程保存图片。如下图所示。

      Warning警告提示如下:UserWarning: name used for saved screenshot does not match file type. It should end with a `.png` extension
    "type. It should end with a `.png` extension", UserWarning)

     

    优化一下用以.png格式保存图片。两次保存皆成功!

     save_screenshot()

      save_screenshot()使用方法与上述get_screenshot_as_file()差不多。我们直接来看实例。代码如下:

    from selenium.webdriver import Chrome
    from time import sleep
    
    # 访问百度
    driver = Chrome("C:Program Files (x86)GoogleChromeApplicationchromedriver.exe")
    driver.get("https://www.baidu.com/")
    
    driver.find_element_by_id("kw").send_keys("selenium")
    sleep(2)
    
    # save_screenshot保存图片
    driver.save_screenshot("D:\PythonProject\Test\Picture\baidu2.png")
    driver.quit()

    get_screenshot_as_png和get_screenshot_as_base64 

      这两个平时并不常用,大家可大体了解一下。get_screenshot_as_png是获取二进制数据流,get_screenshot_as_base64是获取base64编码原始数据,实际工作实践中如遇到再总结整理。

    关闭浏览器

      WebDriver提供了两种quit()和close()方法,quit()是退出相关的驱动程序和关闭所有窗口,close()是用来关闭当前窗口。例多窗口的处理,在用例执行的过程中

    打开了多个窗口,我们想要关闭其中的某个窗口,这时就要用到close()方法进行关闭了。

       我们举个栗子看一下,close()与quit()有什么区别。代码如下:

    from selenium.webdriver import Chrome
    from time import sleep
    
    # 访问百度
    driver = Chrome("C:Program Files (x86)GoogleChromeApplicationchromedriver.exe")
    driver.get("https://www.jd.com/")
    
    # 查看当前window handle
    indexwindow = driver.current_window_handle
    print(indexwindow)
    print('
    ')
    
    driver.find_element_by_link_text("家用电器").click()
    sleep(2)
    
    #循环遍历找到第一个window,再打开一个“手机”页面
    for handle in driver.window_handles:
        if handle == indexwindow:
            driver.find_element_by_link_text("手机").click()
    sleep(2)
    # 查看所有window handles
    print(driver.window_handles)
    print('
    ')
    
    # 关闭当前窗口
    driver.close()
    
    # 查看现在的所有window handles,可看到只是关闭了最开始的一个window,其他两个window还在
    print(driver.window_handles)
    print('
    ')
    
    # 关闭所有窗口,退出相关的驱动程序
    driver.quit()

      上述代码运行结果可看出close()只关闭了最开始打开的一个window,后面打开的两个仍在。如下图所示:

       大家可以动手试试。亲自实践一下记忆更加深刻哦~~~

  • 相关阅读:
    JavaAPI基础(1)
    类与对象、封装、构造方法
    Java语言基础
    Request请求的应用
    Response的应用
    java生成动态验证码
    Servlet的配置
    常见的状态码。。
    简单学习【1】——打包JS
    NodeJS2-2环境&调试----引用系统内置模块,引用第三方模块
  • 原文地址:https://www.cnblogs.com/wuweiblogs/p/11431133.html
Copyright © 2020-2023  润新知