Xcode UI 测试 - 通过 id 在 Webview 中查找元素

Posted

技术标签:

【中文标题】Xcode UI 测试 - 通过 id 在 Webview 中查找元素【英文标题】:Xcode UI Testing - Finding element in Webview by id 【发布时间】:2016-01-19 08:19:50 【问题描述】:

我们的应用是混合的,包含 webview。 我正在尝试使用 Xcode UI 测试自动化我们的应用程序。 我能够使用以下方法找到 Web 按钮:

let app = XCUIApplication() 
app.launch() 
let button = app.staticTexts["Button's text"]

但在我们的一项测试中,我们测试了本地化——这意味着文本发生了变化,静态文本查询不再有效。 找不到任何文档如何通过他的 id(甚至类名)定位元素。有任何想法吗?

【问题讨论】:

可能重复 ***.com/questions/32623869/… ***.com/questions/32623869/… 谢谢!但这无济于事。他们正在谈论在我的文本是动态的时使用“staticTexts”。 @NirH 你有没有发现如何做到这一点?谢谢! @you786 据我研究 - 不可能开箱即用。我最终为每个按钮保留了不同语言的文本字典。 【参考方案1】:

我在尝试填写 SFSafariViewController 中的文本字段时遇到了类似的问题。

我发现使用aria-label 属性可以让我定位页面中的元素,例如

<input role="textbox" aria-label="email" type="email" value="" name="user[email]" id="user_email">

然后在你的代码中选择那个元素

webViewsQuery.textFields["email"]

【讨论】:

您在哪里检查以获得这些属性? 我无法在我的应用中通过 textFields 进行查询,但我希望可以。出于某种原因,我唯一可以查询的两件事是按钮和静态文本【参考方案2】:

通过 id(ui-test 代码,例如在 swift 上):

    app.buttons["yourBtnAccessibilityId"]

这个 id 设置在你的 应用程序代码中(例如在 obj-c 上)并且应该是唯一的。

    yourButton.accessibilityIdentifier = @"yourBtnAccessibilityId";

按类(ui-test code):

    app.buttons.elementBoundByIndex(1)

【讨论】:

这里的问题显然是关于 WebViews,而不是屏幕上的常规按钮。

以上是关于Xcode UI 测试 - 通过 id 在 Webview 中查找元素的主要内容,如果未能解决你的问题,请参考以下文章

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

在没有可访问性 ID 的 Xcode UI 测试中定位元素

如何通过 Xcode 7 中的 UI 测试在 iOS 应用程序中运行代码?

在 Xcode 7 UI 自动化中关闭 Touch Id 操作

如何通过 UI 测试(Xcode 12、iOS14)访问推送通知?

升级到 Xcode 7.2 并且我的 UI 测试通过但没有运行