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,后面打开的两个仍在。如下图所示:

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

猜你喜欢

转载自www.cnblogs.com/wuweiblogs/p/11431133.html