前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Playwright+Python】系列教程(二)手把手带你写一个自动化测试脚本

【Playwright+Python】系列教程(二)手把手带你写一个自动化测试脚本

作者头像
软件测试君
发布2024-07-02 17:11:56
1150
发布2024-07-02 17:11:56
举报
文章被收录于专栏:测试人生测试人生

如何使用代理方式打开网页

playwright.chromium.launch() 中传入 proxy 参数即可,示例代码如下:

1、同步写法:
代码语言:javascript
复制
from playwright.sync_api import sync_playwright

proxy = {'server': 'http:/127.0.0.1:8080'}


def run():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False, proxy=proxy)
        page = browser.new_page()

        page.goto('https://www.baidu.com')

        title = page.title()
        if "百度" in title:
            print("打开百度成功")
        else:
            print("打开百度失败")

        browser.close()


run()
2、异步写法:
代码语言:javascript
复制
from playwright.async_api import async_playwright
import asyncio

proxy = {'server': 'http:/127.0.0.1:8080'}


async def run():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=False, proxy=proxy)
        page = await browser.new_page()

        await page.goto('https://www.baidu.com')

        title = await page.title()
        if "百度" in title:
            print("打开百度成功")
        else:
            print("打开百度失败")

        await browser.close()


asyncio.get_event_loop().run_until_complete(run())

同步和异步写法对比

1、同步的优点:
  • 代码结构简单易懂,不需要学习async/await语法
  • 适用于小规模或简单任务
  • 调试和理解同步代码更简单
2、异步的优点:
  • 能更高效地利用系统资源,避免阻塞等待IO
  • 对于长时间操作如网络请求更高效
  • 可以支持并发执行多个任务
  • 对于大规模和复杂系统更有利
3、区别
  • 对于小任务和学习用途,同步代码结构更简单。
  • 对于需要长时间IO等待的任务(如网络请求),使用异步可以更高效。
  • 对于需要支持高并发的系统(如网站),使用异步模型可以支持更多并发连接。
  • 多线程同步会带来锁的问题,而异步避免了锁的使用。
  • 异步的FUTURE模式也更易于扩展性好,支持动态增加回调函数。
4、总结
  • 小任务用同步
  • 长时间IO任务用异步
  • 高并发系统用异步
  • 以后的功能扩展考虑异步更灵活

一般来说对于现代化系统,异步编程模型将是主流趋势。但同步在某些场景也同样易用。选择时要根据具体需求来权衡。

写一个自动化测试脚本

1、示例脚本

算是个入门的例子,关于每句话的意思,看我注释即可,示例代码如下:

代码语言:javascript
复制
import re
from playwright.sync_api import Page, expect, sync_playwright

proxy = {'server': 'http://127.0.0.1:8080'}


def test_baidu():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False, proxy=proxy)
        page = browser.new_page()
        # 跳转到baidu页面
        page.goto("https://www.baidu.com/")
        # 点击输入框
        page.locator("#kw").click()
        # 输入框输入selenium
        page.locator("#kw").fill("selenium")
        # 点击百度一下查询按钮
        page.get_by_role("button", name="百度一下").click()
        # 验证输入框是否输入selenium
        expect(page.locator("#kw")).to_have_value("selenium")
        # 验证页面是否包含文本“大家还在搜”
        expect(page.locator("#content_left")).to_contain_text("大家还在搜")
        # 退出浏览器
        browser.close()

注意:测试类和测试方法都要用test_ 前缀命名

2、基本操作

这是 Playwright 常用操作列表,请注意,还有许多其他操作,请务必查看定位器 API 部分以了解更多相关信息。

操作

描述

locator.check()

选中输入复选框

locator.click()

点击元素

locator.uncheck()

取消选中输入复选框

locator.hover()

将鼠标悬停在元素上

locator.fill()

填写表单字段,输入文本

locator.focus()

聚焦元素

locator.press()

按下单个键

locator.set_input_files()

选择要上传的文件

locator.select_option()

从下拉菜单中选择选项

3、断言操作

断言

描述

expect(locator).to_be_checked()

复选框处于选中状态

expect(locator).to_be_enabled()

控件已启用

expect(locator).to_be_visible()

元素可见

expect(locator).to_contain_text()

元素包含文本

expect(locator).to_have_attribute()

元素具有属性

expect(locator).to_have_count()

元素列表已给出长度

expect(locator).to_have_text()

元素匹配文本

expect(locator).to_have_value()

输入元素具有值

expect(page).to_have_title()

页面有标题

expect(page).to_have_url()

页面有 URL

4、fixtures夹具的使用

示例代码:

代码语言:javascript
复制
import pytest
from playwright.sync_api import Page, expect, sync_playwright


@pytest.fixture(scope="function", autouse=True)
def before_each_after_each(page: Page):
    print("before the test runs")

    page.goto("https://www.baidu.com/")
    yield

    print("after the test runs")


def test_main_navigation(page: Page):
    page.locator("#kw").fill("久曲健 博客园")
    page.get_by_role("button", name="百度一下").click()
    expect(page.locator("#content_left")).to_contain_text("久曲健 - 博客园")

代码解释:

  • 定义了一个名为 before_each_after_each 的 fixture(夹具),它的作用域是每个测试函数,并且设置为自动应用于每个测试函数。
  • 在这个 fixture 中:打印 "before the test runs",表示测试运行前执行的操作。使用 page.goto("https://www.baidu.com/") 打开百度首页。
  • yield 关键字在这个 fixture 运行期间挂起,等待测试函数执行。测试函数将在 fixture 的环境下执行。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何使用代理方式打开网页
    • 1、同步写法:
      • 2、异步写法:
      • 同步和异步写法对比
        • 1、同步的优点:
          • 2、异步的优点:
            • 3、区别
              • 4、总结
              • 写一个自动化测试脚本
                • 1、示例脚本
                  • 2、基本操作
                    • 3、断言操作
                      • 4、fixtures夹具的使用
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档