大家好,我是菜鸟小哥哥!最近访问Gnet,发现微软开源了一个叫“playwright-python”的项目作为上升项目。Playwright是Python语言的纯自动化工具。它可以通过单个API自动执行Chromium、Firefox和WebKit浏览器,甚至无需编写代码,实现自动化功能。测试工具selenium虽然文档齐全,但是其学习成本让很多菜鸟望而却步。相比之下,playwright-python简直就是新手神器。Playwright真的可以使用Python吗?答案是肯定的,微软已经为PlaywrightforPython做好了准备。可能会发生API重大更改。但很有可能这不会发生,而且微软还表示,只有在他们知道它可以改善你使用新库的体验时才会这样做。不过,微软也警告说,目前还不支持某些供应商特定API的cornercase,例如收集Chromiumtraces、覆盖率报告等。1.Playwright介绍Playwright是一个强大的Python库,可以自动执行主流的自动化操作Chromium、Firefox、WebKit等只有一个API的浏览器,同时支持无头模式和有头模式运行。Playwright提供的自动化技术绿色、强大、可靠、快速,支持Linux、Mac和Windows操作系统。有朋友吹嘘:本项目是Python语言的纯自动化工具,解放了代码,实现了自动化功能。让我们看看如何使用它。2.Playwright的安装Playwright的安装非常简单,两步解决。安装playwright库pipinstallplaywright安装浏览器驱动文件(安装过程有点慢)python-mplaywrightinstall以上两个pip操作分别安装:安装Playwright依赖库,需要Python3.7+安装Chromium、Firefox、WebKit等浏览器驱动文件录制Playwright不需要写一行代码,我们只需要手动操作浏览器,它就会记录我们的操作,然后自动生成代码脚本。下面是记录的命令codegen,就一行。在命令行输入--help可以查看所有选项python-mplaywrightcodegencodegen的使用可以通过--help查看。如果使用简单,直接在命令后面加上url链接即可。如果您有其他需求,可以添加选项。python-mplaywrightcodegen--helpUsage:indexcodegen[options][url]openpageandgeneratecodeforuseractionsOptions:-o,--output将生成的脚本保存到文件中--targetlanguage使用javascript、python、python-async、csharp之一(默认值:“python”)-h,--help显示命令的帮助示例:$codegen$codegen--target=python$-bwebkitcodegenhttps://example.comoptions含义:-o:将录制的脚本保存到文件--target:指定生成脚本的语言,有JS和Python两种,默认为Python-b:指定浏览器驱动例如,我想用百度。com搜索,由chromium驱动,将结果保存为my.py的python文件。python-mplaywrightcodegen--targetpython-o'my.py'-bchromiumhttps://www.baidu.com输入命令行后浏览器会自动打开,然后就可以看到上面的一举一动浏览器会自动翻译成如下代码。结束后浏览器自动关闭,生成的自动化脚本保存到py文件中。fromplaywrightimportsync_playwrightdefrun(playwright):browser=playwright.chromium.launch(headless=False)context=browser.newContext()#打开新页面page=context.newPage()page.goto("https://www.baidu.com/")page.click("input[name="wd"]")page.fill("input[name="wd"]","京东")page.click("text="京东"")#点击//a[normalize-space(.)='京东官网更快更好更省只为品质生活']withpage.expect_navigation():withpage.expect_popup()aspopup_info:page.click("//a[normalize-space(.)='京东官网更快更好更省只为品质生活']")page1=popup_info.value#--------------------context.close()browser.close()和sync_playwright()asplaywright:run(playwright另外,playwright还提供同步和异步API接口,文档为链接:https://microsoft.github.io/playwright-python/index.html同步下面的示例代码:打开三个浏览器一个一、去百度搜索,截图退出。fromplaywrightimportsync_playwrightwithsync_playwright()asp:forbrowser_typein[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同时执行三个浏览器操作。importasynciofromplaywright导入async_playwrightasyncdefmain():asyncwithasync_playwright()asp:forbrowser_typein[p.chromium,p.firefox,p.webkit]:browser=awaitbrowser_type.launch()page=awaitbrowser.newPage()awaitpage.goto('http://baidu.com/')awaitpage.screenshot(path=f'example-{browser_type.name}.png')awaitbrowser.close()asyncio.get_event_loop().run_until_complete(main())在移动端更厉害的是playwright还可以支持移动端的浏览器模拟。下面是官方文档提供的一段代码,在给定的地理位置模拟手机iphone11pro上的Safari浏览器,首先导航到maps.google.com,然后进行定位并截图。fromplaywrightimportsync_playwrightwithsync_playwright()asp:iphone_11=p.devices['iPhone11Pro']browser=p.webkit.launch(headless=False)context=browser.newContext(**iphone_11,locale='en-US',geolocation={'longitude':12.492507,'latitude':41.889938},permissions=['geolocation'])page=context.newPage()page.goto('https://maps.google.com')page.click('text="你的位置"')page.screenshot(path='colosseum-iphone.png')browser.close()另外配合pytest插件也可以。如果你有兴趣,你可以自己尝试一下。3.总结Playwright相对于现有的自动化测试工具有很多优势,包括:支持所有浏览器在Chromium、Firefox和WebKit上进行测试。Playwright拥有适用于所有现代浏览器的完整API,包括GoogleChrome和MicrosoftEdge(带有Chromium)、AppleSafari(带有WebKit)和MozillaFirefox。跨平台WebKit测试。使用Playwright测试您的应用程序在AppleSafari中的行为,它使用适用于Windows、Linux和macOS的WebKit构建。在本地和CI上测试。测试电话。使用设备模拟在移动网络浏览器中测试您的响应式网络应用程序。没有标题和标题。Playwright在无头(无浏览器UI)和有头(有浏览器UI)模式下支持所有浏览器和所有平台。Header模式有利于调试,而Headless模式有利于CI/云执行。快速可靠地执行自动等待API。编剧交互会自动等待元素准备就绪。这提高了可靠性并简化了测试编写过程。没有超时自动化。Playwright会收集网络请求、页面导航和页面加载事件等浏览器信号,以免打扰您的睡眠。与浏览器上下文保持平行。为多个并行隔离的浏览器上下文可执行文件重用单个浏览器实例。性元素选择器。Playwright可以依靠面向用户的字符串(例如文本内容和可访问性标签)来选择元素。这些字符串比与DOM结构紧密耦合的选择器更有弹性。拥有强大的多域、页面和框架自动化能力。Playwright是一个进程外自动化驱动程序,不受页面内JavaScript执行范围的限制,可以自动化具有多个页面的场景。强大的网络控制。Playwright引入上下文范围的网络拦截来终止或模拟网络请求。现代网络功能。Playwright支持带有插入式选择器、地理定位、权限、网络工作者和其他现代网络API的网络组件。能够覆盖所有场景。支持文件下载和上传、进程外iframe、本机输入事件,甚至暗模式。但它对旧版Edge和IE11的支持也很有限。Playwright不支持旧版本的MicrosoftEdge或IE11(弃用通知)。支持新的MicrosoftEdge(在Chromium上)。Java语言绑定:PlaywrightAPI目前在Java或Ruby中不可用。这是一个临时限制,因为Playwright旨在支持任何语言的绑定。在真实的移动设备上进行测试:Playwright使用桌面浏览器来模拟移动设备。虽然有一些限制,但现在剧作家已经更新到1.7.0版本。随着一代又一代的更新,系统会更加完善。作为一个白色的小神器,为大家省下了那么多东西。我们相信它的未来会越来越好。