管理上下文

许多应用程序平台的一个共同特点是,开发人员能够在平台原生应用程序框架内嵌入 Web 内容。这使开发人员能够利用 Web 技术或现有 Web 内容来实现部分或全部应用程序功能。但是,在单个应用程序中混合“模式”的额外复杂性可能会使旨在针对“原生”元素和行为的自动化工具难以使用。

Appium 提供了一组用于处理不同应用程序模式(称为“上下文”)的 API,Appium 驱动程序可以在支持这些不同模式下的自动化命令时实现这些 API。Appium 为此目的在 W3C WebDriver 规范中添加了三个基本命令

命令名称 方法/路由 参数 描述 返回值
获取上下文 GET /session/:id/contexts 获取可用上下文的列表 array<string>
获取当前上下文 GET /session/:id/context 获取活动上下文的名称 string
设置上下文 POST /session/:id/context name (string) 切换到具有给定name的上下文 null

此 API 足够灵活,可以处理驱动程序方面的各种语义解释。例如,XCUITest 驱动程序包含两种上下文:原生应用程序上下文和任何活动 Web 视图,每个 Web 视图一个上下文。对Get Contexts的调用将返回名称列表,您可以作为测试作者筛选这些名称并使用它们切换到适当的上下文。另一个例子是,Appium Altunity 插件引入了UNITY上下文的概念,它封装了插件的所有特定行为,以确保在UNITY上下文之外,使用活动驱动程序的通常命令实现。

重要的是要注意,对Get Contexts的调用将始终包含至少一个上下文,传统上但并非必须命名为NATIVE_APP。这是默认的活动上下文。

根据您所在的上下文类型,驱动程序的操作可能会发生变化。XCUITest 驱动程序在针对 Web 视图上下文时,不会运行其典型的查找和交互元素的例程。相反,它将运行一组适用于 Web 元素的不同例程。这可能会产生各种后果,例如支持不同的定位器策略集。

上表中的命令名称是命令的通用引用,而不是代码示例。有关如何在特定语言客户端库中访问上下文 API 的示例,请访问给定库的文档。