Tabla de contenido
prefacio
Microsoft ha abierto un proyecto de automatización muy poderoso llamado playwright-python
Es compatible con los principales navegadores, incluidos: Chrome, Firefox, Safari, Microsoft Edge, etc. También admite la ejecución en modo sin cabeza y modo con cabeza , y proporciona API síncronas y asíncronas, que se pueden usar junto con el marco de prueba Pytest y admite la navegación. Grabación automática de scripts en el lado del servidor.
Para los amantes de Python, hay otro beneficio mayor, este proyecto es una herramienta de automatización pura para el lenguaje Python , puede lograr funciones de automatización sin escribir una sola línea de código . ¡Parece una fortaleza!
Puede que le resulte un poco increíble, ¿realmente no necesita escribir una línea de código? Pero realmente es así de poderoso. Echemos un vistazo a este artefacto juntos.
Grupo de intercambio de aprendizaje de pruebas automatizadas de Python: un conjunto completo de materiales de aprendizaje de reanudación de entrevistas de pruebas automatizadas para obtener Haga clic en el enlace para unirse al chat grupal [intercambio de pruebas automatizadas de Python]: http://qm.qq.com/cgi-bin/qm/ qr?_wv=1027&k=DhOSZDNS -qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=19 8408628
1. Introducción al Dramaturgo
Playwright es una poderosa biblioteca de Python que puede ejecutar automáticamente las principales operaciones de automatización del navegador, como Chromium, Firefox y WebKit, con solo una API, y admite la ejecución en modo sin cabeza y modo con cabeza al mismo tiempo.
La tecnología de automatización proporcionada por Playwright es ecológica, potente, confiable y rápida, y es compatible con los sistemas operativos Linux, Mac y Windows.
Página web oficial:
Según la explicación en el sitio web oficial, el posicionamiento oficial de Playwright es una verdadera herramienta de prueba web de extremo a extremo .
2. Instalación del dramaturgo
Playwright es poderoso, pero sus pasos de instalación son muy simples, solo necesita 2 pasos:
Paso 1, instale la biblioteca de dependencias playwright-python (debe tenerse en cuenta que la biblioteca playwright debe basarse en Python3.7+ o superior)
#Esto puede ser pip/pip3, o ambos
pip3 install playwright
Puede consultar la información de su versión de dependencia en https://pypi.org/project/playwright/.
Paso 2, instale los controladores de navegador principales
De esta forma, los controladores de los navegadores Chromeium, Firefox y Webkit se descargarán en el servidor local.
# Instale el controlador del navegador (el proceso de instalación es un poco lento, tenga paciencia)
python3 -m playwright install
Si desea verificar las funciones compatibles con Playwright, puede ingresar directamente en la línea de comando:
python3 -m playwright help
Usage: index [options] [command]
Options:
-V, --version output the version number
-b, --browser <browserType> browser to use, one of cr, chromium, ff, firefox, wk,
webkit (default: "chromium")
--color-scheme <scheme> emulate preferred color scheme, "light" or "dark"
--device <deviceName> emulate device, for example "iPhone 11"
--geolocation <coordinates> specify geolocation coordinates, for example
"37.819722,-122.478611"
--lang <language> specify language / locale, for example "en-GB"
--proxy-server <proxy> specify proxy server, for example "http://myproxy:3128" or
"socks5://myproxy:8080"
--timezone <time zone> time zone to emulate, for example "Europe/Rome"
--timeout <timeout> timeout for Playwright actions in milliseconds (default:
"10000")
--user-agent <ua string> specify user agent string
--viewport-size <size> specify browser viewport size in pixels, for example "1280,
720"
-h, --help display help for command
Commands:
open [url] open page in browser specified via -b, --browser
cr [url] open page in Chromium
ff [url] open page in Firefox
wk [url] open page in WebKit
codegen [options] [url] open page and generate code for user actions
screenshot [options] <url> <filename> capture a page screenshot
pdf [options] <url> <filename> save page as pdf
install Ensure browsers necessary for this version of Playwright
are installed
help [command] display help for command
¡Se puede ver en la información de ayuda de la línea de comandos que Playwright admite muchas funciones!
3. Demostración práctica
Como se mencionó al principio, no es necesario escribir una línea de código para usar Playwright, solo necesitamos operar manualmente el navegador, registrará nuestras operaciones y luego generará automáticamente los scripts de código.
1) Grabar guión
Primero veamos la descripción del comando del script de grabación.
python3 -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
en:
- python -m dramaturgo codegen guión de grabación
- --help ayuda documentación
- -o directorio para generar scripts de automatización
- --lenguaje de secuencias de comandos de destino, incluidos JS y Python, los valores correspondientes son: python y javascript
- -b especifica el controlador del navegador
Por ejemplo, quiero buscar en baidu.com, usar el controlador de cromo y guardar el resultado como un archivo python de mikezhou.py.
# 我们通过下面命令打开 Chrome 浏览器开始录制脚本
# 指定生成语言为:Python(默认Python,可选)
# 保存的文件名:mikezhou.py(可选)
# 浏览器驱动:webkit(默认webkit,可选)
# 最后跟着要打开的目标网站(默认仅仅是打开浏览器,可选)
python3 -m playwright codegen --target python -o 'mikezhou.py' -b chromium https://www.baidu.com
Después de ingresar la línea de comando, el navegador se abrirá automáticamente y luego podrá ver que cada movimiento en el navegador se traducirá automáticamente en código, como se muestra a continuación:
Grupo de intercambio de aprendizaje de pruebas automatizadas de Python: un conjunto completo de materiales de aprendizaje de reanudación de entrevistas de pruebas automatizadas para obtener Haga clic en el enlace para unirse al chat grupal [intercambio de pruebas automatizadas de Python]: http://qm.qq.com/cgi-bin/qm/ qr?_wv=1027&k=DhOSZDNS -qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=19 8408628
Finalmente, el script de automatización se generará automáticamente y se guardará en el archivo mikezhou.py, y todas las operaciones manuales anteriores se convertirán automáticamente en código:
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\"]", "禾目大")
# Press CapsLock
page.press("input[name=\"wd\"]", "CapsLock")
# Fill input[name="wd"]
page.fill("input[name=\"wd\"]", "自动化测试实战宝典 ")
# Press Enter
page.press("input[name=\"wd\"]", "Enter")
# assert page.url() == "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95%E5%AE%9E%E6%88%98%E5%AE%9D%E5%85%B8%20&fenlei=256&rsv_pq=af40e9aa00012d5a&rsv_t=c659gpz2%2Fjri1SAoIXdT9gP%2BmrqufXzRtMSSAL0n0fv7GSoLF5vaiNVPA3U&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=38&rsv_sug1=22&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=8034&rsv_sug4=9153"
# Close page
page.close()
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
2) sincronización de soporte
La palabra clave para la sincronización es: sync_playwright
Por ejemplo, usamos tres núcleos de navegador para abrir el navegador a su vez, luego hacemos clic en Baidu, luego tomamos una captura de pantalla de la interfaz de búsqueda y finalmente cerramos el navegador.
from time import sleep
from playwright import sync_playwright
# 注意:默认是无头模式
with sync_playwright() as p:
# 分别对应三个浏览器驱动
for browser_type in [p.chromium, p.firefox, p.webkit]:
# 指定为有头模式,方便查看
browser = browser_type.launch(headless=False)
page = browser.newPage()
page.goto('http://baidu.com')
# 执行一次搜索操作
page.fill("input[name=\"wd\"]", "自动化测试实战宝典")
with page.expect_navigation():
page.press("input[name=\"wd\"]", "Enter")
# 等待页面加载完全
page.waitForSelector("text=搜索工具")
# 截图
page.screenshot(path=f'test-{browser_type.name}.png')
# 休眠3s
sleep(3)
# 关闭浏览器
browser.close()
Cabe señalar que la API integrada de playwright-python básicamente incluye operaciones de automatización comunes.
3) Soporte asíncrono
La palabra clave de la sincronización asíncrona es: async_playwright, la operación asíncrona se puede combinar con asyncio para realizar tres operaciones de navegador al mismo tiempo.
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(headless=False)
page = await browser.newPage()
await page.goto('http://baidu.com')
# 执行一次搜索操作
await page.fill("input[name=\"wd\"]", "自动化测试实战宝典")
await page.press("input[name=\"wd\"]", "Enter")
# 等待页面加载完全
await page.waitForSelector("text=搜索工具")
# 截图
await page.screenshot(path=f'test-{browser_type.name}.png')
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
4) soporte de terminal móvil
Además, dramaturgo también puede admitir la simulación de navegador móvil. El siguiente es un fragmento de código proporcionado por el documento oficial, que simula el navegador Safari en el teléfono móvil iphone 11 pro en una ubicación geográfica determinada, primero navegue a maps.google.com, luego realice el posicionamiento y tome una captura de pantalla.
from playwright import sync_playwright
with sync_playwright() as p:
iphone_11 = p.devices['iPhone 11 Pro']
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="Your location"')
page.screenshot(path='colosseum-iphone.png')
browser.close()
5) Compatibilidad con el marco Pytest
Además, también se puede usar con el complemento pytest, dando un ejemplo del sitio web oficial:
def test_playwright_is_visible_on_google(page):
page.goto("https://www.google.com")
page.type("input[name=q]", "Playwright GitHub")
page.click("input[type=submit]")
page.waitForSelector("text=microsoft/Playwright")
Por supuesto, además de las funciones enumeradas anteriormente, hay usos más interesantes que los lectores interesados pueden explorar por sí mismos.
4. Resumen
En comparación con los marcos de prueba automatizados existentes, dramaturgo tiene muchas ventajas, como:
- Compatible con navegador cruzado, Chromium, Firefox, WebKit;
- Sistema operativo cruzado, compatible con Linux, Mac, Windows;
- Puede proporcionar la función de grabar y generar código, liberando manos;
- Disponible para móvil;
La desventaja actual es que la ecología y la documentación no son muy completas, como que no hay documentación API en chino, no hay buenos tutoriales y ejemplos para aprender. Pero creo que a medida que más y más personas lo sepan, el futuro será cada vez mejor.
Finalmente, déjame contarte un pequeño secreto. Playwright es un marco de trabajo de automatización multilenguaje. Además de ser compatible con Python, también es compatible con Java, JS, etc. Se pueden desbloquear funciones más detalladas a través de proyectos oficiales ~
Resumir:
¡Gracias a todos los que leyeron mi artículo con atención! ! !
Personalmente, clasifiqué algunos materiales técnicos que compilé en mi carrera de prueba de software en los últimos años, que incluyen: libros electrónicos, módulos de currículum, varias plantillas de trabajo, libros de entrevistas, proyectos de autoaprendizaje, etc. Bienvenidos a todos a hacer clic en la tarjeta de presentación a continuación para obtenerla gratis, no se la pierdan.