【问题标题】:How does a UI app inspectors (like the one in Appium) work?UI 应用检查器(如 Appium 中的检查器)如何工作?
【发布时间】:2020-02-11 22:35:12
【问题描述】:

Appium 有一种方法可以使用检查器检查应用的视图层次结构。我有兴趣自己建造一个。

我知道概述答案:它使用一些 webdriver 来完成此操作。但是怎么做? 让我感到困惑的是,一个单独的 iOS 应用程序可以通过某种方式与另一个应用程序通信,甚至显示它的屏幕。

它在后台是如何工作的?或者 iOS 应用如何与 UI 检查器通信以发送其屏幕截图和层次结构?

【问题讨论】:

  • ok.. 所以询问某些东西是如何以编程方式工作的,现在被认为是一个广泛的问题。并且投票已经开始关闭它的过程。哇.. 投票者能否让我知道如何改进问题?

标签: ios appium appium-ios appium-desktop


【解决方案1】:

让我感到困惑的是,一个单独的 iOS 应用程序可以以某种方式与另一个应用程序通信,甚至显示它的屏幕。

是的!应用程序不应该能够做到这一点。但是有一种特殊的应用程序,专为测试而构建,它能够做到这一点。

这样做的方法是使用 Apple 的 XCUITest 框架。当您在 XCode 中编写 XCUITest 时,它会构建一个特殊的应用程序,该应用程序能够启动您的测试应用程序,然后使用 XCUITest 方法与其通信。这些方法允许您检查视图中的元素。

为了创建一个视图树,您从根视图开始并遍历子视图,通过树遍历构建一棵树。

通常,XCUITest 应用程序会在您的测试脚本完成后退出,这意味着您将无法从桌面应用程序访问它来查看更新时的树。如果您编写测试脚本以运行无限循环并打开网络端口以与外部进程通信,那么现在您可以构建查看器。这正是 Appium 所做的,所以我建议您查看 appium source code 并使用它?

更多信息在this blog post

[编辑]:哦,是的,Appium 使用 Feacebook 的 WebDriverAgent 项目作为在应用程序上运行的脚本。所以 WebDriverAgent 基本上是一个 XCUITest 脚本,它运行一个服务器并且可以在测试期间接受命令。 Appium 做了大量工作将其捆绑并打包到能够访问您的应用程序的特殊类型的配套应用程序中,将其安装在 iOS 设备上,然后运行测试。 WebDriverAgent 有一个命令遍历 UIHierarchy 并返回整个树。

【讨论】:

  • 我已经浏览了代码,我了解他们的应用程序如何与外部应用程序通信。 + 1 并感谢您提供的信息。但仍然没有关于他们的检查员如何工作的信息。我认为他们将其隐藏在 WebDriverAgent.bundle 文件下。除非我错了?
  • @iOSCalendarpatchthecode.com 是的。我以前搜索过这段代码,但这有点棘手。又难找了。我建议要么使用 webdriveragent 作为整个库,要么只使用默认的 XCUITest 方法。 WebDriverAgent 使用隐藏类并添加缓存层和东西。默认使用的 XCUITest 方法是获取 Application 根元素,然后只遍历 element.children
  • 很遗憾,我无法使用它。它与我开发的内容不兼容。感谢您的答复。但如果有人知道在哪里可以找到该代码,我将把这个问题留一点。
猜你喜欢
  • 2015-08-02
  • 2015-07-26
  • 2023-04-03
  • 2020-04-30
  • 2019-04-30
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多