窗口截图
自动化用例是由程序去执行的, 因此有时候打印的错误信息并不十分明确. 如果在脚本执行出错的时候能对当前窗口截图保存, 那么通过图片就可以非常直观地看出出错的原因. 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)\Google\Chrome\Application\chromedriver.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)\Google\Chrome\Application\chromedriver.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)\Google\Chrome\Application\chromedriver.exe")
- driver.get("https://www.jd.com/")
- # 查看当前 Windows handle
- indexwindow = driver.current_window_handle
- print(indexwindow)
- print('\n')
- driver.find_element_by_link_text("家用电器").click()
- sleep(2)
- # 循环遍历找到第一个 Windows, 再打开一个 "手机" 页面
- for handle in driver.window_handles:
- if handle == indexwindow:
- driver.find_element_by_link_text("手机").click()
- sleep(2)
- # 查看所有 Windows handles
- print(driver.window_handles)
- print('\n')
- # 关闭当前窗口
- driver.close()
- # 查看现在的所有 Windows handles, 可看到只是关闭了最开始的一个 Windows, 其他两个 Windows 还在
- print(driver.window_handles)
- print('\n')
- # 关闭所有窗口, 退出相关的驱动程序
- driver.quit()
上述代码运行结果可看出 close() 只关闭了最开始打开的一个 Windows, 后面打开的两个仍在. 如下图所示:
大家可以动手试试. 亲自实践一下记忆更加深刻哦~~~
来源: http://www.bubuko.com/infodetail-3175544.html