备注
预览功能不适合生产使用且功能可能受限。 这些功能在正式发布之前已经可用,以便客户可以抢先体验并提供反馈。
概览
Power Apps Test Engine 使用 Playwright 作为 其核心浏览器自动化技术。 这种集成为测试引擎提供了强大、可靠和跨浏览器的测试功能,同时添加了多层抽象以简化应用程序的 Power Platform 测试创建。
测试引擎如何增强 Playwright
虽然 Playwright 提供了出色的浏览器自动化功能,但 Test Engine 专门将这些功能扩展为 Power Platform:
| 测试引擎增强功能 | Description |
|---|---|
| 应用级抽象 | 测试引擎与应用级对象而不是 DOM 元素配合使用,使测试对 UI 更改更具弹性 |
| Power Fx 集成 | 测试引擎增加了 Power Fx 支持,支持低代码方法进行测试创作 |
| 内置身份验证 | 预生成的身份验证机制处理 Microsoft Entra 和条件访问方案 |
| Dataverse 集成 | 直接 Dataverse 集成,可实现全面的端到端测试 |
| 专业提供商 | 画布应用 和 模型驱动应用的 优化提供程序 |
技术实现
以下部分介绍了测试引擎如何建立在 Playwright 的浏览器自动化基础上,并将其与 Power Platform特定的抽象集成,从而实现强大且可维护的测试自动化。
浏览器自动化基础
测试引擎利用 Playwright 的核心功能实现一致的浏览器自动化:
- 对 Chrome 的跨浏览器支持 , Firefox以及 Microsoft Edge
- 自动等待元素准备就绪的可靠等待机制
- 用于模拟 API 响应的网络请求拦截
- 用于诊断测试失败的跟踪和调试工具
Test Engine 的架构集成
- 提供程序层:测试引擎中的提供程序层直接与 Playwright API 交互以控制浏览器行为
- 对象模型:测试引擎不是使用原始 DOM 元素,而是映射到特定于应用程序的对象模型
- Power Fx 层:编写的 Power Fx 测试步骤通过提供者层进行解释和执行
主要技术特点
以下部分重点介绍了 Test Engine 在 Playwright 之上添加的重要技术功能,包括特定于应用程序的选择器、浏览器上下文管理以及直接访问高级场景的 Playwright 函数。
特定于应用的选择器
测试引擎使用特定于应用的选择器,而不是 CSS or XPath 选择器:
# Test Engine (using app-level selectors)
- testSteps: |
Select(Button1)
# Equivalent in raw Playwright (using DOM selectors)
Select(Button1)
# page.locator('div[data-control-name="Button1"]').click();
浏览器上下文管理
测试引擎管理浏览器上下文以支持各种身份验证场景:
# Test Engine handles browser context automatically
pac test run `
--provider canvas `
--test-plan-file testplan.te.yaml `
--tenant $tenantId `
--environment-id $environmentId
直接剧作家功能
虽然测试引擎抽象了许多 Playwright 交互,但在某些情况下,直接访问 Playwright 功能可能很有价值。 测试引擎提供了多个预览功能,可以在测试步骤中 Power Fx 与 Playwright 直接交互。
在测试引擎中使用 Playwright 函数
测试引擎包括以下预览函数,允许您应用 Playwright 的元素选择功能:
| 函数 | Description | 示例 |
|---|---|---|
| 预览.Playwright 作 | 使用或 DOM 选择器对 CSS 元素执行作 | Preview.PlaywrightAction("//button", "click") 参见 常见的剧作家动作作 |
| 预览.剧作家动作值 | 执行需要值参数的作 | Preview.PlaywrightActionValue("//input[@data-id='1']", "fill", "Hello") 参见 常见的剧作家动作值作 |
| 预览.剧作家脚本 | 执行与 Playwright 交互的自定义 C# 脚本 | Preview.PlaywrightScript("sample.csx") 参见 高级:自定义剧作家脚本 |
| 预览.暂停 | 暂停测试执行并显示 Playwright Inspector | Preview.Pause() |
备注
若要使用这些预览函数,必须将预览函数添加到测试设置部分的允许列表中。
常见的剧作家动作作
可以使用 Preview.PlaywrightAction 执行以下作:
| 操作 | Description | 示例 |
|---|---|---|
click |
使用单击事件选择元素 | Preview.PlaywrightAction("//button[@id='submit']", "click") |
exists |
检查元素是否存在 | Preview.PlaywrightAction("//div[@class='error-message']", "exists") |
wait |
等待元素可用 | Preview.PlaywrightAction("//table[@data-loading='false']", "wait") |
常见的剧作家动作值运算
可以使用 Preview.PlaywrightActionValue 执行以下作:
| 操作 | Description | 示例 |
|---|---|---|
fill |
使用文本填充表单字段 | Preview.PlaywrightActionValue("//input[@name='search']", "fill", "Product name") |
select |
从选择列表中选择一个选项 | Preview.PlaywrightActionValue("//select", "select", "Option2") |
setAttribute |
在元素上设置属性 | Preview.PlaywrightActionValue("//div", "setAttribute", "data-custom='value'") |
何时使用直接 Playwright 函数
虽然应用级抽象是首选,但直接 Playwright 函数在以下情况下很有用:
- 标准测试引擎函数未涵盖的复杂 UI 交互
- 应用中 需要特殊处理的第三方组件 Power Platform
- 调试需要更多控制的复杂测试方案
- 元素状态或属性的高级验证
示例:组合方法
此示例演示了将应用级抽象与直接 Playwright 作相结合:
testSteps: |
# Use app-level abstraction for Power Apps control
Select(SubmitButton);
# Use direct Playwright action for a third-party component
Preview.PlaywrightAction("//div[@class='custom-calendar']//button[@data-day='15']", "click");
# Wait for a specific condition using Playwright
Preview.PlaywrightAction("//div[@data-status='complete']", "wait");
# Resume using app-level abstractions
Assert(Label1.Text = "Submission Complete");
高级:自定义剧作家脚本
对于高度专业化的方案,可以创建自定义 Playwright 脚本:
- 使用自定义 Playwright 逻辑创建
.csx文件 - 引用所需的剧作家程序集
- 实现所需的类结构
- 从测试步骤调用脚本
// sample.csx
#r "Microsoft.Playwright.dll"
#r "Microsoft.Extensions.Logging.dll"
using Microsoft.Playwright;
using Microsoft.Extensions.Logging;
public class PlaywrightScript {
public static void Run(IBrowserContext context, ILogger logger) {
Execute(context, logger).Wait();
}
public static async Task Execute(IBrowserContext context, ILogger logger) {
var page = context.Pages.First();
// Custom Playwright logic here
}
}
备注
Preview.PlaywrightScript 仅针对从源代码构建的测试引擎的调试版本实现,而不是在已发布 pac test run 的工具中实现。
与开发过程集成
以下部分介绍了如何在本地开发和 CI/CD 环境中使用 Test Engine 和 Playwright,支持从交互式调试到自动管道执行的一系列工作流程。
地方发展
对于本地开发,Test Engine 提供了一个完整的环境:
- 具有 UI 可见性的本地浏览器执行
- 分步测试执行
- 详细日志和诊断
CI/CD 集成
在 CI/CD 环境中,测试引擎可以在无头模式下运行 Playwright:
# Example Azure DevOps pipeline step
- task: PowerShell@2
displayName: 'Run Test Engine Tests'
inputs:
script: |
pac test run `
--provider canvas `
--test-plan-file "$(Build.SourcesDirectory)/tests/testplan.te.yaml" `
--tenant "$(TenantId)" `
--environment-id "$(EnvironmentId)"
最佳做法
使用测试引擎的 Playwright 集成时:
- 专注于应用级对象 而不是 DOM 元素
- 将函数 Power Fx 用于 复杂逻辑,而不是原始 JavaScript
- 利用内置的身份验证 机制
- 为应用级抽象不足的场景预留直接 Playwright 函数
- 查看生成的测试 以优化可读性和维护性