为什么要学习复用浏览器
- 自动化测试过程中,存在人为介入场景
- 提高调试UI自动化测试脚本效率
举例
场景1:企业微信登录无法通过输入用户名密码的方式登录,需要人工微信扫码,后面的脚本都无法执行
解决方法:通过remote复用浏览器(已人工扫码登录企业微信),后面的脚本自动执行
场景2:编写自动化测试脚本过程中,用例的某一步骤出现问题,调试时需要将此步骤前面的步骤执行完成之后再复现调试。
解决方法:通过复用浏览器的方法(已人工执行完相关步骤)跳过前面的自动化执行步骤,轻松复现出问题的场景,只对问题代码进行调试。
复用已有浏览器
1. 环境配置
需要退出当前所有的谷歌浏览器(特别注意)
通过命令启动谷歌浏览器(前提:已配置好chrome环境变量)
- windows:
chrome --remote-debugging-port=9222
- mac:
Google\Chrome --remote-debugging-port=9222
- windows:
验证是否启动成功
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)
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。