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)\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/")
# 查看当前window handle
indexwindow = driver.current_window_handle
print(indexwindow)
print('\n')
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('\n')
# 关闭当前窗口
driver.close()
# 查看现在的所有window handles,可看到只是关闭了最开始的一个window,其他两个window还在
print(driver.window_handles)
print('\n')
# 关闭所有窗口,退出相关的驱动程序
driver.quit()
上述代码运行结果可看出close()只关闭了最开始打开的一个window,后面打开的两个仍在。如下图所示:
大家可以动手试试。亲自实践一下记忆更加深刻哦~~~