介绍

Playwright是微软开源的用python编写的一款自动化的端到端测试工具。端到端测试使UI交互自动化,并可以验证应用程序的功能。Playwright使开发人员和测试人员可以用Python编写可靠的端到端测试。
playwright-python 提供了同步、异步的 API,可以结合 Pytest 测试框架使用,并且支持浏览器端的自动化脚本录制。

支持的浏览器:
Chrome、Firefox、Safari、Microsoft Edge
运行模式:
无头模式、有头模式

项目地址:https://github.com/microsoft/playwright-python
pip页:https://www.cnpython.com/pypi/playwright

同步事例

同步的关键字为:sync_playwright
比如,我们依次使用三个浏览器内核打开浏览器,然后百度一下,接着对在搜索界面截图,最后关闭浏览器

  1. 1. from time import sleep
  2. 2.
  3. 3. from playwright import sync_playwright
  4. 4.
  5. 5. # 注意:默认是无头模式
  6. 6.
  7. 7. with sync_playwright() as p:
  8. 8. # 分别对应三个浏览器驱动
  9. 9. for browser_type in [p.chromium, p.firefox, p.webkit]:
  10. 10.
  11. 11. # 指定为有头模式,方便查看
  12. 12. browser = browser_type.launch(headless=False)
  13. 13. page = browser.newPage()
  14. 14. page.goto('http://baidu.com')
  15. 15.
  16. 16. # 执行一次搜索操作
  17. 17. page.fill("input[name=\"wd\"]", "AirPython")
  18. 18. with page.expect_navigation():
  19. 19. page.press("input[name=\"wd\"]", "Enter")
  20. 20.
  21. 21. # 等待页面加载完全
  22. 22. page.waitForSelector("text=百度热榜")
  23. 23.
  24. 24. # 截图
  25. 25. page.screenshot(path=f'example-{browser_type.name}.png')
  26. 26.
  27. 27. # 休眠5s
  28. 28. sleep(5)
  29. 29.
  30. 30. # 关闭浏览器
  31. 31. browser.close()

需要指出的是,playwright-python 内置的 API 基本上囊括常见的自动化操作

异步事例

异步步的关键字为:async_playwright
结合 asyncio,我们同时执行上面的操作

1. import asyncio
2. 
3. from playwright import async_playwright
4. 
5. # 异步执行
6. async def main():
7.     async with async_playwright() as p:
8.         for browser_type in [p.chromium, p.firefox, p.webkit]:
9.             # 指定为有头模式,方便查看
10.             browser = await browser_type.launch(headless=False)
11.             page = await browser.newPage()
12. 
13.             await page.goto('http://baidu.com')
14. 
15.             # 执行一次搜索操作
16.             await page.fill("input[name=\"wd\"]", "AirPython")
17.             await page.press("input[name=\"wd\"]", "Enter")
18. 
19.             # 等待页面加载完全
20.             await page.waitForSelector("text=百度热榜")
21. 
22.             # 截图
23.             await page.screenshot(path=f'example-{browser_type.name}.png')
24. 
25.             await browser.close()
26. 
27. 
28. asyncio.get_event_loop().run_until_complete(main())

结语

事实上,Playwright 是一个跨语言的自动化框架,支持 Python、Java、JS 等
Playwright 相比传统的自动化框架 Selenium 来说,在 Context 上下文及 API 使用上,显得更简洁且强大