如何让 Xcode 在混合应用程序的 web 视图中查找元素?

Posted

技术标签:

【中文标题】如何让 Xcode 在混合应用程序的 web 视图中查找元素?【英文标题】:How can I get Xcode to find elements inside a webview for a hybrid app? 【发布时间】:2020-01-24 21:49:08 【问题描述】:

我是目前职位的 SDET,我被要求研究是否可以使用 Xcode 和 XCUITest 来自动化混合应用程序的 UI 测试。我们有一个我们正在内部构建的,它有一个围绕其他应用程序的本地包装器,这些应用程序作为 cocoapods 被拉入。其中一个应用程序是基于 webview 的,这就是给我带来问题的应用程序。

我习惯于使用 Xcode 和 Swift 来编写 UI 自动化,并且我习惯于使用调试器来分析应用程序的元素层次结构。然而,特别是对于这个应用程序,我无法看到 webview 的后代元素。

当我在调试器中执行 po 命令时,我得到的只是一个如下所示的块:

WebView, 0x600002d6c000, 0.0, 82.0, 1024.0, 1284.0
    WebView, 0x600002d6c0e0, 0.0, 82.0, 1024.0, 1284.0
        WebView, 0x600002d6c1c0, 0.0, 82.0, 1024.0, 1284.0
        Other, 0x600002d6c2a0, 991.0, 87.5, 30.0, 1267.5, label: 'Vertical scroll bar, 2 pages', value: 0%
        Other, 0x600002d6c380, 11.0, 1333.0, 1002.0, 30.0, label: 'Horizontal scroll bar, 1 page', value: 0%

这仅在让我验证 webview 已加载时才有用。它不允许我验证其中实际存在的任何内容。

现在,通过谷歌搜索我也知道,假设我在模拟器中运行我的应用程序,我可以打开 Safari 并查看 webview 的源代码。我可以确认这对我有用。然而,这实际上并没有告诉我是否可以从 XCUITest 自动化中访问 webview 的元素,如果可以,我需要如何引用它们。因为我在调试器中实际上看不到它们,所以我很难真正接触到它们。尝试进行 UI Recorder 会话不起作用,因为 UI Recorder 也无法确认元素的存在。

我从谷歌上搜索到的最后一件事是,我发现的绝大多数页面,包括 Stack Overflow 上的页面,都在谈论在 Appium 中进行基于 webview 的自动化。但是,我被特别要求做的是看看它是否可以在 XCUITest 中实现。

所以我的总体问题是:是否可能?在如何获取 webview 的后代方面,我在这里缺少什么吗?

我看到过关于 Appium 需要将“上下文”从本地切换到 webview 上下文的讨论,但我没有在 XCUITest 领域找到任何对等价概念的引用。我对任何其他有用的数据都一无所知。

编辑添加快速跟进备注:

我刚刚在 Apple 开发者论坛上进行了搜索,我在那里看到了某人的评论,这实际上可能是我问题的根源。他们说:

同样的问题,似乎在 ios 上:13.3 Webview 元素为空:/ 而在 iOS 13.1 和 13.2 Webview 上带有 Wbview 中的所有元素,有什么帮助吗?

Source link 为那些参与 Apple 开发者计划的人发表评论。

因此,考虑到这一新增内容,任何人都可以确认我是否真的遇到了 Xcode 功能更改或错误?

再进行一次编辑以添加关于我的开发环境的详细信息,因为它们与问题相关:

Mac 正在运行最新版本的 Catalina,10.15.2 我的 Xcode 是 11.3.1 我正在针对模拟器以及运行 iPadOS 13.3 的物理设备进行测试,不过我也将看看问题是否会针对 13.2 重现

提前感谢您的帮助!

【问题讨论】:

【参考方案1】:

我回答我自己的问题只是因为这可能对其他人有帮助,但如果其他人有相关数据,请说出来!

在我在帖子中引用的 Apple 开发者论坛链接的指导下,我能够确认如果我针对 13.2 而不是 13.3 构建我们的应用程序,我不会重现我的问题。

所以我似乎在这里遇到了 Xcode 11.3.1 或 iPadOS 13.3 中的错误。如果我针对 13.2 构建,我可以很好地看到我的 webview 的后代。

任何其他 SDET/QA 工程师,如果您遇到类似问题并且您可以选择这样做,您应该下载 13.2 模拟器,看看您是否可以针对它进行测试。或者针对运行 13.2 的设备(如果您有可用的设备)。

【讨论】:

这听起来像是应该归档的雷达。 @ablarg:好主意。我需要调查如何获取 Apple 的错误系统,看看是否已经报告过。我还需要看看它是否能针对现在可用的 Xcode 11.4 测试版进行复制。

以上是关于如何让 Xcode 在混合应用程序的 web 视图中查找元素?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode LTR 和 RTL 文本混合来自数据库

APPIUM ANDROID 混合应用程序:在混合应用程序中从本机导航到 Web 视图时,无法将驱动程序上下文获取为“WEBVIEW”

Xcode 在尝试进行涉及 web 视图的 UI 测试时崩溃

如何设置一个自定义端口,在 Xcode 中使用电容器运行我的混合应用程序?

Xcode如何利用预览(Preview)让SwiftUI视图快速适配不同尺寸的设备

如何让自动布局在 Xcode 中工作