selenium-调试技巧-复用浏览器与cookie植入

为什么要学习复用浏览器

  • 自动化测试过程中,存在人为介入场景
  • 提高调试UI自动化测试脚本效率

举例

  • 场景1:企业微信登录无法通过输入用户名密码的方式登录,需要人工微信扫码,后面的脚本都无法执行

    解决方法:通过remote复用浏览器(已人工扫码登录企业微信),后面的脚本自动执行

  • 场景2:编写自动化测试脚本过程中,用例的某一步骤出现问题,调试时需要将此步骤前面的步骤执行完成之后再复现调试。

    解决方法:通过复用浏览器的方法(已人工执行完相关步骤)跳过前面的自动化执行步骤,轻松复现出问题的场景,只对问题代码进行调试。

复用已有浏览器

1. 环境配置

  1. 需要退出当前所有的谷歌浏览器(特别注意)

  2. 通过命令启动谷歌浏览器(前提:已配置好chrome环境变量)

    • windows:chrome --remote-debugging-port=9222
    • mac: Google\Chrome --remote-debugging-port=9222
  3. 验证是否启动成功

    2. 代码配置

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    options = Options()
    options.debugger_address = "localhost:9222"
    driver = webdriver.Chrome(options=options)

3. 通过复用浏览器调试企业微信后台示例

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By


class TestDebugger:
    def setup(self):
        """ 执行测试前,提前打开一个调试窗口,并在调试窗口中打开企微后台,人工扫码登录"""
        options = Options()
        options.debugger_address = "localhost:9222"
        self.driver = webdriver.Chrome(options=options)
        self.driver.get("https://work.weixin.qq.com/wework_admin/frame")


    def test_add_member(self):
        """ 点击常用入口中的【添加成员】"""
        self.driver.find_element(By.CSS_SELECTOR,".ww_indexImg_AddMember").click()

为什么要使用Cookie自动化登录

  • 复用浏览器仍然在每次用例开始都需要人工介入
  • 若用例需要经常执行,复用浏览器则不是一个好的选择
  • 大部分cookie的时效都很长

通过Cookie调试企业微信后台实例

import yaml
from selenium import webdriver
import time


class TestCookie:
    def setup(self):
        self.driver = webdriver.Chrome()

    def teardown(self):
        self.driver.quit()

    def test_get_cookies(self):
        # 访问企业微信通讯录,如果未登录,会自动跳转到二维码登录页
        self.driver.get("https://work.weixin.qq.com/wework_admin/frame#contacts")
        # 等待人工扫码完成登录
        time.sleep(20)
        # 在登录完成之后,调用获取cookie
        cookies = self.driver.get_cookies()
        # 将cookie存入到一个可持久存储的地方
        with open("cookies.yaml", "w") as f:
            yaml.safe_dump(cookies, f)

    def test_cookie_login(self):
        # 1. 访问企业微信通讯录页
        self.driver.get("https://work.weixin.qq.com/wework_admin/frame#contacts")
        # 未登录前,会跳转到二维码登录页
        # 2. 获取已经具有登录状态的cookie
        cookies = yaml.safe_load(open("cookies.yaml"))
        # 3. 植入cookie到浏览器中
        for cookie in cookies:
            self.driver.add_cookie(cookie)
        time.sleep(3)
        # 4. 重新访问企业微信通讯录页,测试是否已登录
        self.driver.get("https://work.weixin.qq.com/wework_admin/frame#contacts")
        time.sleep(5)

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
My Show My Code