zoukankan      html  css  js  c++  java
  • playwright入门

    最近发现了一个自动化测试的神器。
    官网地址:https://playwright.dev/docs/why-playwright/

    Playwright提供了一组API,可自动执行Chromium,Firefox和WebKit浏览器。
    通过使用Playwright API,您可以编写Python代码来创建新的浏览器页面,导航到URL,然后与页面上的元素进行交互。
    Playwright可以与测试运行程序一起用于自动进行用户交互,以验证和测试Web应用程序。
    Playwright API通过以下原语实现此目的。

    • 打开浏览器
    • 浏览器上下文
    • 页面和框架
    • 选择器
    • 自动等待
    • 执行上下文:Node.js和浏览器
    • 对象和元素句柄

    一、安装

    使用阿里源,下载速度快一点。
    pip install playwright -i https://mirrors.aliyun.com/pypi/simple/

    安装Chromium、Firefox、WebKit等浏览器的驱动文件
    python -m playwright install

    二、录制

    使用Playwright无需写一行代码,我们只需手动操作浏览器,它会录制我们的操作,然后自动生成代码脚本。
    下面就是录制的命令codegen,仅仅一行。
    python -m playwright codegen

    举例:我要在baidu.com搜索,用chromium驱动,将结果保存为my.py的python文件。

    python -m playwright codegen --target python -o my.py -b chromium https://www.baidu.com

    下面的例子,展示的打开百度,进行搜索。系统自动录制操作动作,并生成python脚本

    from playwright import sync_playwright
    
    def run(playwright):
        browser = playwright.chromium.launch(headless=False)
        context = browser.newContext()
    
        # Open new page
        page = context.newPage()
    
        # 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\"]", "宝马汽车")
    
        # Go to https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E8%9A%82%E8%9A%81%E6%B2%89%E9%A6%99&fenlei=256&rsv_pq=9922438e0001e6c4&rsv_t=80e30fK9WkdiBWynXeqiNJIl80Q0ZcAuB3ZzCZU6IIcnQXPoLhm4khTU79A&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=14&rsv_sug1=16&rsv_sug7=100&rsv_btype=i&prefixsug=%25E8%259A%2582%25E8%259A%2581%25E6%25B2%2589%25E9%25A6%2599&rsp=5&inputT=6054&rsv_sug4=6670
        page.goto("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E8%9A%82%E8%9A%81%E6%B2%89%E9%A6%99&fenlei=256&rsv_pq=9922438e0001e6c4&rsv_t=80e30fK9WkdiBWynXeqiNJIl80Q0ZcAuB3ZzCZU6IIcnQXPoLhm4khTU79A&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=14&rsv_sug1=16&rsv_sug7=100&rsv_btype=i&prefixsug=%25E8%259A%2582%25E8%259A%2581%25E6%25B2%2589%25E9%25A6%2599&rsp=5&inputT=6054&rsv_sug4=6670")
    
        page1 = context.newPage()
        # Go to https://zhidao.baidu.com/question/615937275180020252.html
        page1.goto("https://zhidao.baidu.com/question/615937275180020252.html")
    
        # Double click div[id="answer-content-1510052568"]
        page1.dblclick("div[id=\"answer-content-1510052568\"]")
        print(page1.element("div[id=\"answer-content-1510052568\"]").innertext())
        # Close page
        page1.close()
    
        # Close page
        page.close()
    
        # ---------------------
        context.close()
        browser.close()
    
    with sync_playwright() as playwright:
        run(playwright)
    

    三、同步

    下面示例代码:依次打开三个浏览器,前往baidu搜索,截图后退出。

    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()
    

    四、异步

    异步操作可结合asyncio同时进行三个浏览器操作。

    import asyncio
    from playwright import async_playwright
    async def main():
    async with async_playwright() as p:
    for browser_type in [p.chromium, p.firefox, p.webkit]:
    browser = await browser_type.launch()
    page = await browser.newPage()
    await page.goto('http://baidu.com/')
    await page.screenshot(path=f'example-{browser_type.name}.png')
    await browser.close()
    asyncio.get_event_loop().run_until_complete(main())

  • 相关阅读:
    Chrome开发者工具中Elements(元素)断点的用途
    最简单的SAP云平台开发教程
    Java实现 LeetCode 495 提莫攻击
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 494 目标和
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 493 翻转对
    Java实现 LeetCode 492 构造矩形
  • 原文地址:https://www.cnblogs.com/duoba/p/14297802.html
Copyright © 2011-2022 走看看