系列初窥篇-Python+Playwright自动化测试-浏览器的相关操作

1.简介

上一篇已经将playwright的元素定位大法基本介绍的差不多了,但是在Web的UI自动化的测试中,我们通常需要使用一些方法来操作浏览器,今天就跟随学习了解一下。这一篇宏哥主要是介绍一下,在自动化测试的时候,我们常见的一些浏览器操作有哪些,宏哥将会一一介绍和讲解。

2.层级

在介绍浏览器的相关操作之前,宏哥先介绍一下层级,宏哥理解的其实就是操作层级,不对的话,欢迎批评指正。在Playwright中,测试层级为:

Broswer->Context->Page

3.浏览器操作

宏哥首先介绍一下浏览器常用的基本操作,然后再通过具体实例给小伙伴或者童鞋们演示一下。既然是浏览器的操作,那首先得将浏览器启动(打开)才能操作,因此首先介绍一下playwright如何启动浏览器。

3.1启动浏览器

浏览器是通过browser_type.launch()创建的。

browser = playwright.chromium.launch(headless=False, args=['--start-maximized'])

上面启动了一个浏览器,开启有头模式,并且通过args参数向chrome传递开启时窗口最大化。

开启浏览器格式为playwright.browser_type.launch (...args),browser_type为浏览器类型,args为传递给浏览器的参数,这个可以参考浏览器的官方文档。

忽略HTTPS告警:加入如下参数即可。

'--ignore-certificate-errors'

其他更多详细内容您可以参考官方文档,查看完整的API参数列表:BrowserType | Playwright Python

3.2启动上下文

使用browser.new_context() 创建context对象,context之间是相互隔离的,可以理解为轻量级的浏览器实例。它不会与其他浏览器上下文共享 cookies/缓存。如需要不同用户登录同一个网页,不需要创建多个浏览器实例,只需要创建多个context即可。

context = browser.new_context(no_viewport=True)

上下文就是浏览器的环境,Page是页面包含了元素、组件的状态等等,而上下文则包括了会话状态、Cookie、页面信息等。

注意:我们需要设置no_viewport=True,否则将默认按照800*600创建视口,你会发现,窗口很大,但是网页很小。

3.3为上下文添加cookie

使用add_cookies()为上下文添加cookie。

browser_context.add_cookies([cookie_object1, cookie_object2])

参数为字典列表,每个cookie字典有如下字段,其中url或者域名、path虽然都是可选的,但必须要有一个。

name 名称

value 值

url 可选

domain 域名

path 路径

expires 浮点数,过期时间,Unix时间(精确到秒)可选

httpOnly 是否为httpOnly,可选

secure 安全模式,可选

sameSite "Strict"|"Lax"|"None" 同站策略,可选

3.4访问页面

在context上新建一个页面对象然后调用goto方法即可。

page = context.new_page()
page.goto("https://www.baidu.com")

3.5刷新、前进和后退

page.reload()
page.go_back()
page.go_forward()

3.6浏览器窗口最大化

前边宏哥提到可以通过设置 args 参数 --start-maximized 并且设置 no_viewport=True

from playwright.sync_api import sync_playwright  
  
with sync_playwright() as p:  
    browser = p.chromium.launch(  
        headless=False,#关闭无头模式  
        args=['--start-maximized']  #设置谷歌浏览器参数  
    )  
    context = browser.new_context(no_viewport=True)  #设置no_viewport参数  
    page = context.new_page()  
    page.goto("https://www.baidu.com")  
    page.pause()

3.7指定浏览器窗口的大小

我们可以通过viewport指定窗口大小。已知问题:浏览器不会贴合到屏幕左侧。

viewport 可以在 new_context 或者 new_page 方法中设置,都可生效。

from playwright.sync_api import sync_playwright  
  
with sync_playwright() as p :  
    browser  = p.chromium.launch(  
        headless=False,  
    )  
    context = browser.new_context(  
        viewport={'width': 1920, 'height': 1080},  
    )  
    page = context.new_page()  
    page.goto("https://www.baidu.com")  
    page.pause()

3.8退出浏览器

先关闭上下文,再退出浏览器。

关闭上下文时,上下文所属的页面也会一起关闭。

browser_context.close()
browser.close()

3.9以特定设备布局打开浏览器

from playwright.sync_api import sync_playwright
 
def run(playwright):
    iphone_13 = playwright.devices['iPhone 13']
    browser = playwright.webkit.launch(headless=False)
    context = browser.new_context(
        **iphone_13,
    )
 
with sync_playwright() as playwright:
    run(playwright)

4.项目实战

以度娘为例,首先启动浏览器,然后再设置浏览器的大小。查询“北京宏哥”后,刷新页面执行回退到百度首页,然后有执行前进进入到搜索“北京宏哥”页面,最后退出浏览器。

4.1代码设计

按照上边的步骤进行代码设计,如下图所示:

4.2参考代码

# coding=utf-8🔥

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2023-06-27
@author: 北京-宏哥   QQ交流群:705269076
公众号:北京宏哥
Project: 《《最新出炉》系列初窥篇-Python+Playwright自动化测试-7-浏览器的相关操作
'''

# 3.导入模块
from playwright.sync_api import sync_playwright

with sync_playwright() as p :
    # 1.启动浏览器
    browser  = p.chromium.launch(headless=False)
    # 2.设置浏览器窗口大小
    context = browser.new_context(viewport={'width': 1920, 'height': 1080},)
    page = context.new_page()
    # 3.访问度娘
    page.goto("https://www.baidu.com")
    # 等待5秒
    page.wait_for_timeout(5000)
    # 4.输入“北京宏哥”,点击“百度一下”
    page.fill("input[name=\"wd\"]", "北京宏哥")
    page.click("text=百度一下")
    # 等待5秒
    page.wait_for_timeout(5000)
    # 5.刷新页面
    page.reload()
    # 等待5秒
    page.wait_for_timeout(5000)
    # 6.浏览器后退
    page.go_back()
    # 等待5秒
    page.wait_for_timeout(5000)
    # 7.浏览器前进
    page.go_forward()
    # 8.浏览器退出
    page.wait_for_timeout(5000)
    context.close()
    browser.close()

4.3运行代码

1.运行代码,右键Run'Test',控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作,可以看到查询“北京宏哥”后,刷新页面执行回退到百度首页,然后有执行前进进入到搜索“北京宏哥”页面。如下图所示:

5.小结

好了,关于浏览器的相关操作非常简单,时间不早了今天就分享到这里,感谢你耐心地阅读!

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取【保证100%免费】

在这里插 入图片描述

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述


在这里插入图片描述

<think>好的,我现在需要回答用户关于如何将Python+Playwright自动化测试代码部署到CI/CD流程中的问题。首先,我得回想一下自己之前学过的相关知识,确保信息的准确性。 首先,用户可能已经用PythonPlaywright写好了自动化测试,现在需要集成到CI/CD中。CI/CD通常指的是持续集成和持续交付/部署,常见的工具有Jenkins、GitHub Actions、GitLab CI/CD、CircleCI等。我需要考虑不同平台的具体步骤,但可能用户希望一个通用的流程,或者以某个主流平台为例,比如GitHub Actions,因为现在很多项目托管在GitHub上。 接下来,我应该分步骤来介绍。第一步可能是准备测试环境,确保依赖项正确安装。Playwright需要浏览器二进制文件,可能在CI环境中需要额外处理。比如,在Docker容器中运行的话,可能需要安装依赖库,或者使用Playwright自带的安装命令。 然后是编写测试脚本,用户可能已经完成了这部分,但可能需要调整以适应CI环境,比如如何处理测试结果输出,退出码是否正确,以便CI系统能判断测试是否通过。例如,pytest在测试失败时会返回非零退出码,这对CI很重要。 接下来是配置CI/CD平台。以GitHub Actions为例,需要创建workflow文件,指定触发条件,比如每次push或PR时运行。然后设置步骤:安装Python、安装依赖、安装Playwright浏览器,运行测试,处理测试结果报告。 可能需要提到缓存依赖项以加快构建速度,比如缓存pip安装的包和Playwright浏览器。此外,生成测试报告,比如使用pytest-html生成HTML报告,并上传到CI的工件中,方便查看。 另外,Playwright可能需要一些系统依赖,比如在Linux环境中,可能需要安装libgtk等库,但Playwright的install命令可能会自动处理这些。不过可能需要确保在CI环境中正确执行playwright install。 还要注意,有些CI环境可能需要配置headless模式运行浏览器Playwright默认可能就是headless,但可能需要确认。 可能的常见问题包括:权限问题、依赖缺失、浏览器无法启动、测试超时等,如何处理这些情况,比如增加超时设置,或者检查日志。 最后,可能需要展示一个简单的GitHub Actions的示例配置文件,让用户更直观地理解如何配置。 需要确保步骤清晰,避免使用过于专业的术语,或者解释清楚。同时提醒用户根据实际使用的CI平台调整步骤,比如如果用的是GitLab,配置方式会不同,但总体流程类似。 总结下来,步骤可能包括: 1. 确保测试脚本能在本地运行。 2. 配置CI环境,安装Python、依赖、Playwright。 3. 执行测试并生成报告。 4. 处理测试结果,如上传报告或通知。 需要检查是否有遗漏的步骤,比如是否需要显式启动浏览器,或者如何处理测试数据。此外,可能提到并行测试、缓存优化等进阶内容,但用户可能只需要基础流程。 现在需要将这些思路组织成结构化的回答,分点说明,并给出示例代码块,比如GitHub Actions的YAML配置示例,以及可能需要的命令,如安装依赖的命令。</think>将Python + Playwright自动化测试集成到CI/CD流程中,主要分为以下步骤(以GitHub Actions为例): --- ### **1. 环境准备** - **确保本地测试通过**:在提交前,确保测试脚本在本地能正常运行(`pytest` 或自定义执行命令)。 - **生成依赖清单**:使用 `pip freeze > requirements.txt` 生成依赖列表,包含`playwright`和测试框架(如`pytest`)。 --- ### **2. 配置CI/CD文件** 在项目根目录创建 `.github/workflows/ci.yml`,示例如下: ```yaml name: Playwright Tests on: push: branches: [ main ] pull_request: branches: [ main ] jobs: test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.10' - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt playwright install # 安装Playwright浏览器二进制 playwright install-deps # 安装系统依赖(仅Linux需要) - name: Run tests run: pytest tests/ --html=report.html # 假设使用pytest-html生成报告 - name: Upload test report uses: actions/upload-artifact@v3 if: always() # 无论测试是否失败都上传 with: name: html-report path: report.html ``` --- ### **3. 关键配置说明** - **依赖安装**:通过`playwright install`安装Chromium等浏览器,`playwright install-deps`解决Linux系统依赖。 - **Headless模式**:Playwright默认以无头模式运行,无需额外配置。 - **测试报告**:使用`pytest-html`生成HTML报告,并通过`upload-artifact`上传到CI结果页。 --- ### **4. 适配其他CI平台** - **GitLab CI**:在 `.gitlab-ci.yml` 中定义类似步骤,使用`image: python:3.10`指定Docker镜像。 - **Jenkins**:在Pipeline脚本中安装Python插件,执行`sh`命令安装依赖并运行测试。 --- ### **5. 常见问题处理** - **浏览器启动失败**:确保CI环境中安装了所有[系统依赖](https://playwright.dev/docs/library#system-requirements)。 - **测试超时**:在CI配置中增加超时设置(如GitHub Actions的`timeout-minutes`)。 - **缓存优化**:缓存Python依赖(`~/.cache/pip`)和Playwright浏览器(`~/.cache/ms-playwright`)以加速执行。 --- ### **6. 进阶优化** - **并行测试**:使用`pytest-xdist`并行执行用例(`pytest -n auto`)。 - **容器化执行**:构建包含所有依赖的Docker镜像,提升环境一致性。 - **通知集成**:通过CI的Webhook通知测试结果到Slack/钉钉等平台。 --- **最终效果**:每次代码提交或PR时,自动触发测试并生成可视报告,确保代码变更不会破坏现有功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值