Playwright支持同步和异步两种模式来编写测试脚本。同步模式使用sync_api,异步模式使用async_api。我们可以根据自己的偏好选择适合的模式。
同步与异步模式原理
同步模式:
• 直接顺序执行测试逻辑,直到完成。
• 使用上下文管理器或启动/关闭方法控制浏览器生命周期。
• 简单易用,适合同步测试场景。
• 但无法实现异步或重叠的测试逻辑。
异步模式:
• 利用asyncio模块以异步非阻塞方式执行测试逻辑。
• 浏览器启动/关闭和大多数Playwright API也是异步的,需要await。
• 可以实现复杂的异步或重叠测试逻辑。
• 但较难调试,有一定学习成本。
Python - 同步模式
使用sync_api,我们可以编写同步的测试脚本:
from playwright.sync_api import sync_playwright
def run(playwright):
chromium = playwright.chromium
browser = chromium.launch()
page = browser.new_page()
page.goto("http:///")
user_agent = page.locator("text=User-Agent String:").text_content()
print(user_agent)
browser.close()
with sync_playwright() as playwright:
run(playwright)
这里我们使用sync_playwright上下文管理器同步启动Playwright,然后编写同步测试逻辑。
Python - 异步模式
使用async_api,我们可以编写异步的测试脚本:
from playwright.async_api import async_playwright
async def run(playwright):
chromium = playwright.chromium
browser = await chromium.launch()
page = await browser.new_page()
await page.goto("http:///")
user_agent = await page.locator("text=User-Agent String:").text_content()
print(user_agent)
await browser.close()
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
这里我们使用asyncio模块异步启动Playwright,然后编写异步测试逻辑。需要使用await关键字标识异步操作。
Node.js - 同步模式
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('http:///');
const userAgent = await page.$eval('text=User-Agent String:', el => el.innerText);
console.log(userAgent);
await browser.close();
})();
Node.js - 异步模式
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('http:///');
const userAgent = await page.$eval('text=User-Agent String:', el => el.innerText);
console.log(userAgent);
await browser.close();
})();
Java - 同步模式
import com.microsoft.playwright.*;
public class Example {
public static void main(String[] args) {
Playwright playwright = Playwright.create();
BrowserType chromium = playwright.chromium();
Browser browser = chromium.launch();
Page page = browser.newPage();
page.navigate("http:///");
String text = page.locator("text=User-Agent String:").textContent();
System.out.println(text);
browser.close();
playwright.close();
}
}
Java 异步版Playwright目前还在开发中,暂无异步模式示例。
总结
Playwright支持同步和异步两种模式来编写测试脚本。我们可以根据项目需要和个人偏好选择适合的模式。同步模式更简单易用,异步模式可以实现更高效的异步测试逻辑。
三种语言的同步/异步测试脚本模式基本类似。理解两种模式的原理和区别,可以帮助我们更好地选择适合自己项目的模式。