暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Playwright自动化测试新秀

中航鲸技术 2021-11-23
2460

Playwright 是 2020 年初由微软公司发布的自动化测试工具。不少人称它为小白神器。

1Playwright 介绍

Playwright 是一个强大的 Python 库,为 Chromium、Firefox 和 WebKit 浏览器的自动化操作提供了统一的 API。Playwright 宗旨是实现持久、功能强大、可靠且快速的跨浏览器的 Web 自动化操作。

Playwright 支持 Linux、Mac 以及 Windows 操作系统。Playwright 基于 Puppeteer但又向 Selenium 取了经,它能使用熟悉的 npm 语法快速轻松地安装,并使用 JavaScript 来构建网络应用程序自动化和测试。

2Playwright 安装

python 版本

首先需要安装 python3.7 以上的版本, 已经安装可以查看版本,我安装的为 3.7.3 版本。


安装 playwright

  • 命令:pip install playwright

安装完查看是否安装成功以及版本

  • 命令:python -m playwright -V

安装浏览器驱动文件(安装过程有一点慢耐心等待)

  • 命令:python -m playwright install

录制

使用 Playwright 无需写一行代码,我们只需手动操作浏览器,它会录制我们的操作,然后自动生成代码脚本。

  • 命令:python -m playwright codegen -h

  • 其他选项:

-target 生成语言,有 python/javascript/python-async/csharp 可选,缺省值为 python

-o 保存路径,也可以写成--output

-b 指定浏览器,浏览器选项如下(缺省默认为 chromium):

cr 谷歌浏览器,或全称 chromium

-h 查看帮助,也可写成--help

3如何在 IDEA 中使用 Playwright

在 IDEA 创建一个 python 项目,然后在IDEA的终端输入命令进行录制。

  • 命令:python -m playwright codegen --target python -o 'test.py' -b chromium https://www.baidu.com/

录入完成之后关闭浏览器,会在项目的目录下生成”test.py”文件

from playwright.sync_api import Playwright, sync_playwright

def run(playwright: Playwright) -> None:
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()

    # Open new page
    page = context.new_page()

    # Go to https://www.baidu.com/
    page.goto("https://www.baidu.com/")

    # Click input[name="wd"]
    page.click("input[name=\"wd\"]")

    # Fill input[name="wd"]
    page.fill("input[name=\"wd\"]""鲸钱包")

    # Click text=百度一下
    # with page.expect_navigation(url="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E9%B2%B8%E9%92%B1%E5%8C%85&fenlei=256&rsv_pq=9845e77e0003c2fd&rsv_t=3b768IlUBkHniVTW5WPiihS4CAH%2F4tF1kc7n7YnCcfWSHJMIgGnZtJm1IkQ&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=19&rsv_sug1=7&rsv_sug7=100&rsv_btype=i&inputT=12365&rsv_sug4=14754&rsv_jmp=fail"):
    with page.expect_navigation():
        page.click("text=百度一下")

    # Close page
    page.close()

    # ---------------------
    context.close()
    browser.close()


with sync_playwright() as playwright:
    run(playwright)


4playwright 还提供了异步和同步的 API 接口

异步

  • 根据之前生成的代码和官网文档实现异步
from time import sleep
from playwright.sync_api import Playwright, sync_playwright
##异步操作浏览器
with sync_playwright() as playwright:
    for browser_type in [playwright.chromium, playwright.firefox, playwright.webkit]:
        browser = browser_type.launch(headless=False)
        context = browser.new_context()
        # Open new page
        page = browser.new_page()

        # Go to https://www.baidu.com/
        page.goto("https://www.baidu.com/")

        # Click input[name="wd"]
        page.click("input[name=\"wd\"]")

        # Fill input[name="wd"]
        page.fill("input[name=\"wd\"]""鲸钱包")

        # Click text=百度一下
        # with page.expect_navigation(url="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E9%B2%B8%E9%92%B1%E5%8C%85&fenlei=256&rsv_pq=9845e77e0003c2fd&rsv_t=3b768IlUBkHniVTW5WPiihS4CAH%2F4tF1kc7n7YnCcfWSHJMIgGnZtJm1IkQ&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=19&rsv_sug1=7&rsv_sug7=100&rsv_btype=i&inputT=12365&rsv_sug4=14754&rsv_jmp=fail"):
        with page.expect_navigation():
            page.click("text=百度一下")
        sleep(5)
        #截图保存
        page.screenshot(path=f'example-{browser_type.name}.png')

        # Close page
        page.close()

        # ---------------------
        # ---------------------
        context.close()
        browser.close()

同步

from playwright import sync_playwright
with sync_playwright() as p:
for browser_type in [p.chromium, p.firefox, p.webkit]:
    browser = browser_type.launch()
    page = browser.newPage()
    page.goto('https://baidu.com/')
    page.screenshot(path=f'example-{browser_type.name}.png')
    browser.close()

5playwright 支持移动端模拟

from playwright.sync_api import Playwright, sync_playwright
from time import sleep

##
with sync_playwright() as playwright:
    iphone_11 = playwright.devices['iPhone 11 Pro']
    browser = playwright.webkit.launch(headless=False)
    context = browser.new_context(
        **iphone_11,
        locale='en-US',
        geolocation={ 'longitude'12.492507'latitude'41.889938 },
        permissions=['geolocation']
    )
    page = context.new_page()
    page.goto('https://www.jingqb.com')
    sleep(10)
    page.screenshot(path='colosseum-iphone.png')
    browser.close()

  • 执行完成之后自动保存的图片

6总结

Playwright 作为新一代自动化测试工具,相较于 Selenium 不论是易用性,还是实用性都得到了全方位的提升,做到了简约而不简单。当然 Playwright 也有缺点如 SSL 录制问题,移动设备只能模拟无法控制真机问题,还有待改善。对 Playwright 兴趣的朋友可以官网(https://playwright.dev/)查看更多资料。本次分享就这里。



- END -



文章转载自中航鲸技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论