Playwright 是一个用于自动化测试和网页操作的工具,它由 Microsoft 开发并开源。使用 Playwright,您可以编写代码来模拟用户与网页的交互,进行自动化测试,或者执行一系列网页操作。Playwright 支持多种编程语言,如 JavaScript、Python、和 C#,并提供了丰富的 API,可以用于控制浏览器的行为,例如打开页面、填写表单、点击按钮等等。Playwright 还支持多种浏览器,包括 Chromium、Firefox 和 WebKit。通过 Playwright,您可以轻松地编写可靠的自动化测试,以及进行各种网页操作。
在 Playwright for Python 中,`Page` 类常用的方法和属性包括:
### 方法(Methods):
- `add_init_script(script, **kwargs)`: 添加一个初始化脚本,将在每次新页面加载时执行。
- `add_locator_handler(name, script=None, handler=None)`: 添加一个定位器处理程序,允许使用自定义定位器。
- `add_script_tag(url=None, path=None, content=None)`: 向页面添加一个 script 标签,可以是 URL、文件路径或者直接提供脚本内容。
- `add_style_tag(url=None, path=None, content=None)`: 向页面添加一个 style 标签,可以是 URL、文件路径或者直接提供样式内容。
- `bring_to_front()`: 将页面置于前台。
- `close()`: 关闭页面。
- `content()`: 返回页面的 HTML 内容。
- `drag_and_drop(source, target)`: 拖拽元素从源位置到目标位置。
- `emulate_media(media=None, **kwargs)`: 模拟媒体类型。
- `evaluate(page_function, *args, force_expr=False)`: 在页面上下文中执行 JavaScript 函数,并返回结果。
- `evaluate_handle(page_function, *args, force_expr=False)`: 在页面上下文中执行 JavaScript 函数,并返回 JSHandle 对象。
- `expect_console_message(text=None, predicate=None, timeout=None)`: 期待控制台消息。
- `expect_download(**kwargs)`: 期待下载。
- `expect_event(event, predicate=None, timeout=None)`: 期待事件。
- `expect_file_chooser(predicate=None, timeout=None)`: 期待文件选择器。
- `expect_popup(**kwargs)`: 期待弹出窗口。
- `expect_request(url=None, predicate=None, timeout=None)`: 期待请求。
- `expect_request_finished(url=None, predicate=None, timeout=None)`: 期待请求完成。
- `expect_response(url=None, predicate=None, timeout=None)`: 期待响应。
- `expect_websocket(url=None, predicate=None, timeout=None)`: 期待 WebSocket 连接。
- `expect_worker(url=None, predicate=None, timeout=None)`: 期待工作线程。
- `expose_binding(name, callback)`: 公开绑定。
- `expose_function(name, callback)`: 公开函数。
- `frame(url=None, name=None)`: 返回新的 Frame 实例。
- `frame_locator(selector)`: 使用选择器返回新的 Frame 实例。
- `get_by_alt_text(text)`: 根据 alt 文本查找元素。
- `get_by_label(text)`: 根据标签文本查找元素。
- `get_by_placeholder(text)`: 根据占位符文本查找元素。
- `get_by_role(role)`: 根据角色查找元素。
- `get_by_test_id(id)`: 根据测试 ID 查找元素。
- `get_by_text(text)`: 根据文本内容查找元素。
- `get_by_title(text)`: 根据标题文本查找元素。
- `go_back()`: 后退。
- `go_forward()`: 前进。
- `goto(url, **kwargs)`: 导航到指定的 URL。
- `locator(selector)`: 返回新的 Locator 实例。
- `opener()`: 返回新的 Page 实例,表示打开当前页面的页面。
- `pause(timeout)`: 暂停执行。
- `pdf(**kwargs)`: 生成 PDF。
- `reload(**kwargs)`: 重新加载页面。
- `route(url, handler)`: 拦截并路由给定 URL 的请求。
- `route_from_har(entries)`: 使用 HAR(HTTP 归档文件格式)中的条目设置路由规则。
- `screenshot(**kwargs)`: 截图。
- `set_content(html, **kwargs)`: 设置页面内容。
- `set_default_navigation_timeout(timeout)`: 设置默认的导航超时时间。
- `set_default_timeout(timeout)`: 设置默认的超时时间。
- `set_extra_http_headers(headers)`: 设置额外的 HTTP 标头。
- `set_viewport_size(width, height)`: 设置视口大小。
- `title()`: 返回页面标题。
- `unroute(url=None)`: 取消拦截指定 URL 的请求。
- `unroute_all()`: 取消所有请求的拦截。
- `wait_for_event(event, predicate=None, timeout=None)`: 等待事件。
- `wait_for_function(page_function, *args, timeout=None, force_expr=False, polling=None)`: 等待函数执行。
- `wait_for_load_state(state=None, timeout=None)`: 等待页面加载状态。
- `wait_for_url(url, timeout=None)`: 等待 URL 更改。
### 属性(Properties):
- `context`: 返回页面的执行上下文。
- `frames`: 返回所有子帧的列表。
- `is_closed`: 返回页面是否已关闭。
- `keyboard`: 返回键盘实例。
- `main_frame`: 返回主帧。
- `mouse`: 返回鼠标实例。
- `request`: 返回请求对象。
- `touchscreen`: 返回触摸屏实例。
- `url`: 返回当前页面的 URL。
- `video`: 返回页面的视频对象。
- `viewport_size`: 返回视口大小。
- `workers`: 返回所有工作者的列表。
通过使用这些方法和属性,可以对页面进行各种操作和查询,以实现自动化测试或者其他 Web 应用程序的交互。
---------------
Playwright的主要类和模块,它们提供了丰富的功能来处理各种Web自动化测试场景:
- APIRequest: 处理API请求的类。
- APIRequestContext: API请求上下文。
- APIResponse: API响应对象。
- Accessibility: 提供对页面无障碍功能的访问和操作。
- Browser: 浏览器对象,用于控制浏览器实例。
- BrowserContext: 浏览器上下文,用于控制浏览器环境。
- BrowserType: 浏览器类型,用于创建浏览器实例。
- CDPSession: Chrome DevTools Protocol (CDP) 会话。
- ConsoleMessage: 控制台消息。
- Dialog: 对话框。
- Download: 下载对象。
- ElementHandle: 页面元素句柄。
- Error: 错误对象。
- FileChooser: 文件选择器。
- Frame: 页面框架。
- FrameLocator: 框架定位器。
- JSHandle: JavaScript句柄。
- Keyboard: 键盘操作。
- Locator: 元素定位器。
- Mouse: 鼠标操作。
- Page: 页面对象。
- Request: 请求对象。
- Response: 响应对象。
- Route: 路由对象,用于拦截和修改请求。
- Selectors: 选择器,用于查找页面元素。
- TimeoutError: 超时错误。
- Touchscreen: 触摸屏操作。
- Tracing: 跟踪测试执行。
- Video: 视频录制对象。
- WebError: Web错误。
- WebSocket: WebSocket连接。
- Worker: Web Worker对象。
- Assertions: 断言模块,用于验证测试结果。
- APIResponseAssertions: API响应断言。
- LocatorAssertions: 元素定位器断言。
- PageAssertions: 页面断言。
-------------------------
Locator是Playwright自动等待和重试功能的核心部分。
简而言之,定位器表示在页面上找到元素的方法。可以使用page.locator()方法创建一个定位器。
**方法(Methods):**
- all: 查找所有匹配的元素。
- all_inner_texts: 获取所有匹配元素的内部文本。
- all_text_contents: 获取所有匹配元素的文本内容。
- and_: 逻辑与操作。
- blur: 触发元素的失焦事件。
- bounding_box: 获取元素的边界框。
- check: 选中复选框或单选按钮。
- clear: 清空输入框中的文本。
- click: 单击元素。
- count: 计算匹配元素的数量。
- dblclick: 双击元素。
- dispatch_event: 分发自定义事件到元素。
- drag_to: 将元素拖拽到另一个位置。
- evaluate: 在页面上下文中执行JavaScript代码。
- evaluate_all: 在页面上下文中执行JavaScript代码,并返回所有匹配元素的结果。
- evaluate_handle: 在页面上下文中执行JavaScript代码,并返回句柄。
- fill: 在输入框中输入文本。
- filter: 根据条件过滤匹配的元素。
- focus: 让元素获取焦点。
- frame_locator: 获取框架内的元素定位器。
- get_attribute: 获取元素的属性值。
- get_by_alt_text: 根据alt文本获取元素。
- get_by_label: 根据标签获取元素。
- get_by_placeholder: 根据占位符获取元素。
- get_by_role: 根据角色获取元素。
- get_by_test_id: 根据测试ID获取元素。
- get_by_text: 根据文本获取元素。
- get_by_title: 根据标题获取元素。
- highlight: 高亮元素。
- hover: 悬停在元素上。
- inner_html: 获取元素的内部HTML。
- inner_text: 获取元素的内部文本。
- input_value: 获取输入框中的值。
- is_checked: 检查元素是否被选中。
- is_disabled: 检查元素是否被禁用。
- is_editable: 检查元素是否可编辑。
- is_enabled: 检查元素是否可用。
- is_hidden: 检查元素是否隐藏。
- is_visible: 检查元素是否可见。
- locator: 创建元素的子定位器。
- nth: 获取匹配元素集合中的第n个元素。
- or_: 逻辑或操作。
- press: 模拟按键按下事件。
- press_sequentially: 按顺序按下一系列按键。
- screenshot: 截取元素的屏幕截图。
- scroll_into_view_if_needed: 滚动元素到可见区域。
- select_option: 选择下拉列表中的选项。
- select_text: 选择文本。
- set_checked: 设置复选框或单选按钮的选中状态。
- set_input_files: 设置文件输入框中的文件。
- tap: 点击元素。
- text_content: 获取元素的文本内容。
- uncheck: 取消选中复选框或单选按钮。
- wait_for: 等待元素出现。
**属性(Properties):**
- first: 获取匹配元素集合中的第一个元素。
- last: 获取匹配元素集合中的最后一个元素。
- page: 获取元素所属的页面对象。
------------------------------------
BrowserContext 提供了一种操作多个独立浏览器会话的方式。
下面是对每个方法和属性的简要介绍:
---方法---
1. **add_cookies**: 向当前浏览器上下文添加 cookie。
2. **add_init_script**: 向每个新创建的页面添加初始化脚本。
3. **clear_cookies**: 清除当前浏览器上下文的所有 cookie。
4. **clear_permissions**: 清除当前浏览器上下文的所有权限设置。
5. **close**: 关闭当前浏览器上下文,结束所有页面会话。
6. **cookies**: 获取当前浏览器上下文中的所有 cookie。
7. **expect_console_message**: 期望捕获控制台输出的消息。
8. **expect_event**: 期望捕获指定事件。
9. **expect_page**: 期望创建新页面并返回其上下文。
10. **expose_binding**: 将 JavaScript 函数绑定到页面中的 window 对象,以供页面中的 JavaScript 调用。
11. **expose_function**: 在浏览器上下文中公开 Node.js 函数,以供页面中的 JavaScript 调用。
12. **grant_permissions**: 授予指定的权限给当前浏览器上下文。
13. **new_cdp_session**: 创建一个新的 Chrome DevTools Protocol (CDP) 会话。
14. **new_page**: 创建一个新的页面会话并返回其上下文。
15. **route**: 设置路由,用于拦截和修改网络请求。
16. **route_from_har**: 根据 HAR 文件中的请求模式设置路由。
17. **set_default_navigation_timeout**: 设置默认的页面导航超时时间。
18. **set_default_timeout**: 设置默认的等待超时时间。
19. **set_extra_http_headers**: 设置额外的 HTTP 请求头。
20. **set_geolocation**: 设置页面的地理位置。
21. **set_offline**: 设置页面的离线状态。
22. **storage_state**: 获取当前浏览器上下文的存储状态。
23. **unroute**: 取消路由,停止拦截和修改指定的路由。
24. **unroute_all**: 取消所有路由,停止拦截和修改所有路由。
25. **wait_for_event**: 等待直到指定事件发生。
---属性---
1. **background_pages**: 获取当前浏览器上下文中的后台页面。
2. **browser**: 获取当前浏览器上下文所属的浏览器实例。
3. **pages**: 获取当前浏览器上下文中的所有页面。
4. **request**: 获取当前浏览器上下文的网络请求实例。
5. **service_workers**: 获取当前浏览器上下文中的服务工作线程。
6. **tracing**: 获取当前浏览器上下文的跟踪实例。