Selenium中关于截图的内容详解

前言

Selenium是一种强大的自动化测试工具,而截图是其在测试和调试过程中非常重要的一部分。本文将深入探讨Selenium截图的深度使用技巧,包括如何截取整个页面、特定元素、以及在测试失败时进行截图等。

截取整个页面

在某些测试场景中,可能需要截取整个页面的快照,以便查看整体的页面布局。Selenium提供了get_screenshot_as_file方法来实现这一目标。

简单代码示例:

 from selenium import webdriver
 ​
 driver = webdriver.Chrome()
 driver.get("https://www.baidu.com")
 ​
 # 截取整个页面并保存为文件
 driver.get_screenshot_as_file("full_page_screenshot.png")
 driver.quit()

截取特定元素

有时候,可能只对页面上的特定区域或元素进行截图。可以使用Selenium的WebElement对象的screenshot_as_png属性来截取特定元素的快照。

 from selenium import webdriver
 ​
 driver = webdriver.Chrome()
 driver.get("https://www.baidu.com")
 ​
 # 定位元素
 element = driver.find_element("id", "kw")
 ​
 # 截取特定元素并保存为文件
 element.screenshot("element_screenshot.png")
 driver.quit()

在测试失败时进行截图

在自动化测试中,当测试失败时,保存页面的截图通常是很有用的。这可以更好地了解问题所在。

例子一:

 import pytest
 from selenium import webdriver
 ​
 @pytest.fixture
 def driver():
     driver = webdriver.Chrome()
     yield driver
     driver.quit()
 ​
 def test_example(driver):
     driver.get("https://webdemo.com")
 ​
     # 模拟失败的测试条件
     assert "incorrect_text" in driver.page_source
 ​
     # 如果测试失败,截取页面截图
     if pytest.failures:
         driver.get_screenshot_as_file("test_failure_screenshot.png")

在这个例子中,如果测试失败,Selenium将在当前工作目录下保存一个名为test_failure_screenshot.png的截图文件。

例子二:

 @pytest.hookimpl(hookwrapper=True)
 def pytest_runtest_makereport():
 ​
   out = yield
     
     report = out.get_result()
 ​
     if report.when == "call":
         # 获取用例call执行结果为失败的情况
         xfail = hasattr(report, "wasxfail")
         if (report.skipped and xfail) or (report.failed and not xfail):
             # 添加allure报告截图
             with allure.step("添加失败截图......"):
                 allure.attach(driver.get_screenshot_as_png(),
                               "test_failure_screenshot", allure.attachment_type.PNG)

在这个例子中,是将用例执行失败的截图,添加到Allure报告中进行展示。

截取滚动页面

有时,页面可能比屏幕更长,需要滚动才能看到所有内容。为了截取整个页面,你可能需要滚动并多次截图,然后将这些截图拼接在一起。

 from selenium import webdriver
 from selenium.webdriver.common.by import By
 ​
 def get_full_page_screenshot(driver, file_path):
     # 获取页面高度
     total_height = int(driver.execute_script(
       "return Math.max( document.body.scrollHeight, document.body.offsetHeight,
       document.documentElement.clientHeight,
       document.documentElement.scrollHeight,
       document.documentElement.offsetHeight);")
     )
 ​
     # 设置窗口大小
     driver.set_window_size(1200, total_height)
 ​
     # 截取整个页面并保存为文件
     driver.save_screenshot(file_path)
 ​
 # 使用示例
 driver = webdriver.Chrome()
 driver.get("https://www.baidu.com")
 ​
 get_full_page_screenshot(driver, "full_page_screenshot.png")
 ​
 driver.quit()

结语

Selenium的截图功能是一个强大的工具,用于在自动化测试和调试中提供有用的信息。通过深入了解如何截取整个页面、特定元素、在测试失败时进行截图,以及如何处理滚动页面,可以更好地利用Selenium的截图功能。这些技巧有助于提高自动化测试的可维护性和调试效率。本次的分享就到这里了,下次再见👋🏻

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值