前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >不写一行代码来实现自动化

不写一行代码来实现自动化

作者头像
赵云龙龙
发布2021-03-16 11:10:16
发布2021-03-16 11:10:16
86900
代码可运行
举报
文章被收录于专栏:python爱好部落python爱好部落
运行总次数:0
代码可运行

由于技术的进步,各行各业的门槛越来越低。 以前别人说会selenium就是会自动化。好像很高大上的样子。现在会selenium估计是基本的。大家都忙着内卷,各种轮子越来越多,自动化的门槛也越来越低。

我们聊到自动化,一般会聊到自动化的测试框架。

基于 Selenium 的测试框架: robot framework webdriver Appium 基于JS语言的测试工具: cypress puppeteer 每种自动化框架和工具都有各自的优点吧。

我们用自动化框架的时候,无非就是看重:一:学习成本低;二:使用和维护方便快捷;

上面的框架都不能达到这两个低门槛。现在微软直接将门槛降到零。

最近,微软开源了一个项目叫「playwright-python」这个项目是针对Python语言的纯自动化工具,连代码都不用写,就能实现自动化功能。对于小白来说,只要操作一遍,简单看懂代码,就完事了。 如果页面改变了,大不了重新录制一遍,简直不要太方便了。关键是他可以选择语言,JS, python都可以。

Playwright是一个强大的Python库,仅用一个API即可自动执行Chromium、Firefox、WebKit等主流浏览器自动化操作,并同时支持以无头模式、有头模式运行。

Playwright提供的自动化技术是绿色的、功能强大、可靠且快速,支持Linux、Mac以及Windows操作系统。

好了,说了这么多,来看看怎么使用的吧。

Playwright使用

安装

Playwright的安装非常简单,两步走。

代码语言:javascript
代码运行次数:0
运行
复制
# 安装playwright库
pip install playwright

# 安装浏览器驱动文件(安装过程稍微有点慢)
python -m playwright install

上面两个pip操作分别安装:

  • 安装Playwright依赖库,需要Python3.7+
  • 安装Chromium、Firefox、WebKit等浏览器的驱动文件

录制

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

下面就是录制的命令codegen,仅仅一行。用法可以使用--help查看,如果简单使用就是直接在命令后面加上url链接,如果有其他需要可以添加options

代码语言:javascript
代码运行次数:0
运行
复制
python -m playwright codegen --help
Usage: index codegen [options] [url]

open page and generate code for user actions

Options:
  -o, --output <file name>  saves the generated script to a file
  --target <language>       language to use, one of javascript, python, python-async, csharp (default: "python")
  -h, --help                display help for command

Examples:

  $ codegen
  $ codegen --target=python
  $ -b webkit codegen https://example.com

options含义:

  • -o:将录制的脚本保存到一个文件
  • --target:规定生成脚本的语言,有JSPython两种,默认为Python
  • -b:指定浏览器驱动

比如,我要在baidu.com搜索,用chromium驱动,将结果保存为my.pypython文件。

代码语言:javascript
代码运行次数:0
运行
复制
python -m playwright codegen --target python -o test.py -b chromium https://www.baidu.com

命令行输入后会自动打开浏览器,然后可以看见在浏览器上的一举一动都会被自动翻译成代码,结束后自动关闭浏览器,保存生成的自动化脚本到py文件。

以下是我随便录制的一个web工具的应用。

代码语言:javascript
代码运行次数:0
运行
复制
from playwright.sync_api import sync_playwright

def run(playwright):
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()

    # Open new page
    page = context.new_page()

    qa_url="https://xxx.cn/dbquery/dbquery.aspx"
    stg_url="https://xxx.cn/dbquery/dbquery.aspx"
    page.goto(stg_url)

    print(page.text_content("[aria-label=\"Sign-in options\"]"))
    # Click [placeholder="someone@example.com"]
    page.click("[placeholder=\"someone@example.com\"]")


    # Fill [placeholder="someone@example.com"]
    page.fill("[placeholder=\"someone@example.com\"]"

    # Click text=Next

    with page.expect_navigation():
        page.click("text=Next")


    # Click [placeholder="Password"]
    page.click("[placeholder=\"Password\"]")

    # Fill [placeholder="Password"]
    page.fill("[placeholder=\"Password\"]", "Test@")

    # Click text=Sign in
    page.click("text=Sign in")



    # Check [aria-label="Don't show this again"]
    page.check("[aria-label=\"Don't show this again\"]")

    # Click text=Yes
    # with page.expect_navigation(url="https://qadeepblue2.eflabs.cn/dbquery/dbquery.aspx"):
    with page.expect_navigation():
        page.click("text=Yes")
    # assert page.url == "https://login.microsoftonline.com/kmsi"

    # Click textarea[name="TxtQuery"]
    page.click("textarea[name=\"TxtQuery\"]")

    # Fill textarea[name="TxtQuery"]
    page.fill("textarea[name=\"TxtQuery\"]", "select top 10* from ET_main.dbo.Members")

    # Click text=Execute
    page.click("text=Execute")


    # Close page
    page.close()

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

with sync_playwright() as playwright:
    run(playwright)

可以看到,它每步都有注释,assert,你只需要将assert注释打开,就是测试点了,对于小白来说,省时又省力。

此外,playwright还提供了同步和异步的API接口,文档如下。

链接:https://microsoft.github.io/playwright-python/index.html

同步

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

代码语言:javascript
代码运行次数:0
运行
复制
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同时进行三个浏览器操作。

代码语言:javascript
代码运行次数:0
运行
复制
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())

移动端

更厉害的是,playwright还可支持移动端的浏览器模拟。

如果你有点技术功底,可以尝试结合其他测试框架,例如pytest等结构化一下,就可以做一个比较漂亮的自动化测试了。

我大概尝试了一下,这个比起selenium来,方便的地方有两点,一:等待时间不需要设定,二:查找元素太方便了。

平时喜欢折腾点爬虫,数据分析等,有的时候某个元素定位不到,或者不稳定,有了这个东西,真实方便又快捷。

Mobile上我还没去尝试,等尝试好了,给大家汇报汇报。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python粉丝团 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Playwright使用
    • 安装
    • 录制
    • 同步
    • 异步
    • 移动端
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档