web自动化测试_selenium_05_窗口截图、验证码处理

文章目录

  • (一)窗口截图
  • (二)验证码
    • 一、验证码的处理方式:
    • 二、cookie
      • [1. Cookie 核心概念](#1. Cookie 核心概念)
        • [1.1 生成机制](#1.1 生成机制)
        • [1.2 核心作用](#1.2 核心作用)
        • [1.3 浏览器行为](#1.3 浏览器行为)
      • [2. Selenium 中 Cookie 操作应用](#2. Selenium 中 Cookie 操作应用)
        • [1.1 核心 API 方法](#1.1 核心 API 方法)
      • [2.2 实操步骤(以百度登录状态为例)](#2.2 实操步骤(以百度登录状态为例))
      • [3. 常见场景扩展](#3. 常见场景扩展)
      • [4. 总结](#4. 总结)

(一)窗口截图

把当前操作的页面,截图保存到指定位置。

driver.get_screenshot_as_file(imgpath)

复制代码
应用场景:失败截图,让错误看的更直观
方法: 
	driver.get_screenshot_as_file(imgepath)
参数:
	imagepath:为图片要保存的目录地址及文件名称
		如: 当前目录 ./test.png
			 上一级目录 ../test.png
扩展:
	1. 多条用例执行失败,会产生多张图片,可以采用时间戳的形式,进去区分。
	操作: 
		driver.get_screenshot_as_file("../image/%s.png"%(time.strftime("%Y_%m_%d %H_%M_%S")))
		strftime:将时间转为字符串函数
注意:
	%Y_%m_%d %H_%M_%S:代表,年 月 日 时 分 秒

(二)验证码

一种随机生成是信息(数字、字母、汉字、图片、算术题)等为了防止恶意的请求行为,增加应用的安全性。

一、验证码的处理方式:

① 去掉验证码(测试环境下)

② 设置万能验证码(生产环境和测试环境下)

③ 验证码识别技术(Python-tesseract)

④ 记录 cookie(通过记录cookie进行跳过登录)

二、cookie

1.1 生成机制

Cookie 由服务器端生成,当浏览器首次向服务器发送请求时,服务器会在响应中携带 Cookie 信息返回给浏览器。

1.2 核心作用
  • 标识用户会话状态(最典型场景:登录状态保持)
  • 存储用户偏好设置、浏览记录等临时数据
  • 实现"免重复登录""记住我"等功能
1.3 浏览器行为

浏览器会自动保存 Cookie(按域名隔离存储),后续向同一服务器发送请求时,会自动将对应 Cookie 附加到请求头中,无需手动干预。

1.1 核心 API 方法
方法 功能描述 返回值/参数要求
driver.get_cookies() 获取当前页面所属域名下的所有 Cookie 返回列表,每个元素是 Cookie 字典(含 name、value 等字段)
driver.add_cookie(cookie_dict) 向当前浏览器添加 Cookie 参数为字典,必须包含 name(Cookie 名称)和 value(Cookie 值),可选字段:domain(域名)、path(路径)等

2.2 实操步骤(以百度登录状态为例)

步骤说明
  1. 打开目标网站(确保 Cookie 对应的域名与当前页面域名一致)
  2. 添加已获取的有效 Cookie(如百度 BDUSS,用于保持登录状态)
  3. 暂停等待 Cookie 生效(建议 2 秒以上)
  4. 刷新页面,验证 Cookie 效果
完整代码示例
python 复制代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import time

# 1. 初始化浏览器(Chrome 为例,自动管理驱动)
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

try:
    # 2. 打开百度首页(必须先访问目标域名,否则 Cookie 无法添加)
    driver.get("http://www.baidu.com")
    print("首次打开百度,未登录状态")
    time.sleep(1)  # 等待页面加载

    # 3. 添加百度登录状态 Cookie(BDUSS 需替换为自己的有效值)
    # 如何获取 BDUSS?:浏览器F12 → Application → Cookies → www.baidu.com → 复制 BDUSS 的 value
    baidu_cookie = {
        "name": "BDUSS",  # Cookie 名称(百度固定为 BDUSS)
        "value": "你的实际 BDUSS 值",  # 关键!替换为自己的有效 BDUSS
        "domain": ".baidu.com",  # 可选:指定域名(百度Cookie 支持所有子域名,前缀加.)
        "path": "/",  # 可选:Cookie 生效路径(根路径表示全站生效)
        "httpOnly": False,  # 可选:是否仅 HTTP 请求可访问
        "secure": False  # 可选:是否仅 HTTPS 生效(百度 HTTP 可访问)
    }
    driver.add_cookie(baidu_cookie)
    print("已添加 BDUSS Cookie")

    # 4. 暂停 2 秒以上,确保 Cookie 写入生效
    time.sleep(3)

    # 5. 刷新页面,验证登录状态
    driver.refresh()
    print("页面已刷新,可观察是否已登录百度")

    # (可选)获取当前所有 Cookie,验证是否添加成功
    all_cookies = driver.get_cookies()
    print("\n当前页面所有 Cookie:")
    for cookie in all_cookies:
        if cookie["name"] == "BDUSS":
            print(f"BDUSS 验证成功:{cookie['value'][:20]}...")  # 只打印前20位,避免敏感信息泄露

    # 保持浏览器打开,便于观察效果(手动关闭)
    input("按回车键关闭浏览器...")

finally:
    # 关闭浏览器,释放资源
    driver.quit()
2.3 关键注意事项
  1. 域名一致性要求

    • 添加 Cookie 前,必须先通过 driver.get() 访问 Cookie 对应的域名(如百度 .baidu.com),否则 Selenium 会报错(跨域 Cookie 无法添加)。
    • 不同网站的 Cookie 名称和格式不同(如淘宝的登录 Cookie 不是 BDUSS),需自行通过浏览器开发者工具查询。
  2. BDUSS 有效性

    • BDUSS 是百度用户的登录凭证,具有时效性(过期后失效),需从自己登录百度后的浏览器中获取最新值。
    • 获取方式:浏览器打开百度 → 按 F12 打开开发者工具 → 切换到 Application 标签 → 左侧 Cookies → 选择 www.baidu.com → 找到 BDUSS 并复制其 Value。
  3. 必须刷新页面

    • 添加 Cookie 后,页面不会自动生效,需通过 driver.refresh() 刷新,让浏览器重新加载页面并使用新添加的 Cookie。
  4. Cookie 字典格式

    • namevalue 是必填字段,其他字段(domain、path 等)可选,但如果服务器对 Cookie 有严格限制(如指定 path 为 /user),则需准确填写,否则 Cookie 可能无法生效。

3. 常见场景扩展

  1. Cookie 保存与复用

    • 可将登录后的 Cookie 保存到文件(如 JSON),后续测试无需重复登录:

      python 复制代码
      # 保存 Cookie 到文件
      import json
      with open("baidu_cookies.json", "w") as f:
          json.dump(driver.get_cookies(), f)
      
      # 从文件加载 Cookie
      with open("baidu_cookies.json", "r") as f:
          cookies = json.load(f)
          for cookie in cookies:
              driver.add_cookie(cookie)
  2. 清除 Cookie

    • 单个 Cookie:driver.delete_cookie("BDUSS")
    • 所有 Cookie:driver.delete_all_cookies()
  3. Cookie 有效期问题

    • 若测试中发现 Cookie 失效,需重新获取最新的 Cookie(如重新登录网站后复制 BDUSS)。

4. 总结

  • Cookie 的核心价值是保持会话状态,在自动化测试中可用于跳过登录步骤,提高测试效率。
  • Selenium 操作 Cookie 的核心是 get_cookies()add_cookie(),关键要保证域名一致刷新页面
  • 不同网站的 Cookie 格式不同,需结合浏览器开发者工具查询具体字段,灵活调整代码。
相关推荐
Run Freely9375 小时前
web自动化测试-Selenium04_iframe切换、窗口切换
selenium
B站计算机毕业设计之家6 小时前
Python招聘数据分析可视化系统 Boss直聘数据 selenium爬虫 Flask框架 数据清洗(附源码)✅
爬虫·python·selenium·机器学习·数据分析·flask
天才测试猿9 小时前
Selenium三大等待详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
wearegogog1239 小时前
用docker搭建selenium grid分布式环境
分布式·selenium·docker
^毛小兔^12 小时前
Postman实现jwt发送请求
测试工具·postman
程序员小远12 小时前
Postman接口测试: Postman环境变量&全局变量设置,多接口顺序执行详解
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
天才测试猿12 小时前
Postman使用方法
自动化测试·软件测试·测试工具·职场和发展·测试用例·接口测试·postman
程序员三藏12 小时前
Postman定义公共函数
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
安冬的码畜日常13 小时前
【JUnit实战3_26】第十五章:表现层测试(下)—— Selenium 在网页测试中的用法
selenium·测试工具·junit·gui测试·junit5·表现层测试