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://whatsmyuseragent.org/")
  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://whatsmyuseragent.org/")
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://whatsmyuseragent.org/');
  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://whatsmyuseragent.org/'); 
  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://whatsmyuseragent.org/");
    String text = page.locator("text=User-Agent String:").textContent();
    System.out.println(text);
    browser.close();
    playwright.close(); 
  }
}

Java 异步版Playwright目前还在开发中,暂无异步模式示例。

总结

Playwright支持同步和异步两种模式来编写测试脚本。我们可以根据项目需要和个人偏好选择适合的模式。同步模式更简单易用,异步模式可以实现更高效的异步测试逻辑。

三种语言的同步/异步测试脚本模式基本类似。理解两种模式的原理和区别,可以帮助我们更好地选择适合自己项目的模式。

Playwright系列:第6章 Playwright脚本同步与异步_Java