Appium 有一种方法可以使用检查器检查应用程序的视图层次结构。我有兴趣自己建造一个。
我知道概述答案:它使用一些 webdriver 来完成此操作。但是怎么做?让我感到困惑的是,一个单独的 iOS 应用程序可以如何与另一个应用程序通信,甚至显示它的屏幕。
它是如何在引擎盖下工作的?或者 iOS 应用程序如何与 UI 检查器通信以发送其屏幕截图和层次结构?
Appium 有一种方法可以使用检查器检查应用程序的视图层次结构。我有兴趣自己建造一个。
我知道概述答案:它使用一些 webdriver 来完成此操作。但是怎么做?让我感到困惑的是,一个单独的 iOS 应用程序可以如何与另一个应用程序通信,甚至显示它的屏幕。
它是如何在引擎盖下工作的?或者 iOS 应用程序如何与 UI 检查器通信以发送其屏幕截图和层次结构?
让我感到困惑的是,一个单独的 iOS 应用程序可以如何与另一个应用程序通信,甚至显示它的屏幕。
是的!应用程序不应该能够做到这一点。但是有一种特殊的应用程序,专为测试而构建,它能够做到这一点。
这样做的方法是使用 Apple 的 XCUITest 框架。当您在 XCode 中编写 XCUITest 时,它会构建一个特殊的应用程序,该应用程序能够启动您的测试应用程序,然后使用 XCUITest 方法与其通信。这些方法允许您检查视图中的元素。
为了创建视图树,您从根视图开始并遍历子视图,构建具有树遍历的树。
通常,当您的测试脚本完成时,XCUITest 应用程序会退出,这意味着您将无法从桌面应用程序访问它来查看更新时的树。如果您编写测试脚本以运行无限循环并打开网络端口以与外部进程通信,那么现在您可以构建您的查看器。这正是 Appium 所做的,所以我建议您查看appium 源代码,也许只是使用它?
此博客文章中的更多信息
[编辑]:哦,是的,Appium 使用 Feacebook 的 WebDriverAgent 项目作为在应用程序上运行的脚本。所以 WebDriverAgent 基本上是一个 XCUITest 脚本,它运行一个服务器并且可以在测试期间接受命令。Appium 做了大量工作将其捆绑并打包到能够访问您的应用程序的特殊类型的配套应用程序中,将其安装在 iOS 设备上,然后运行测试。WebDriverAgent 有一个命令遍历 UIHierarchy 并返回整个树。