gpt4 book ai didi

Xcode UITest 有时找不到 XCUIElement 的属性

转载 作者:行者123 更新时间:2023-12-04 16:26:51 26 4
gpt4 key购买 nike

在我的 UI 测试中,一些 XCUIElement 的 frame 属性被发现,但不是其他人。
下面使用的可访问性标识符在 Storyboard中设置,appsetUp() 中初始化如XCUIApplication() .

这是 Storyboard布局:

enter image description here

测试中使用的两个 UI 元素是文本字段和添加按钮。

以下是相关代码:

func test() {
// given
let mainViewNavigationBar = app.navigationBars[„NavBar“]
let navBarHeight = mainViewNavigationBar.frame.size.height
print("navBarHeight: \(navBarHeight)") // is printed out correctly

let addShoppingItemTextField = app.textFields["TextField"]
let textFieldHeight = addShoppingItemTextField.frame.size.height // error breakpoint here
print("textFieldHeight: \(textFieldHeight)")
}

测试在倒数第二行的错误断点处停止,并显示以下消息:
No matches found for Find: Descendants matching type TextField from input {(
Application, 0x60000019f070, pid: 13114, label: ‚xxx‘
)}

我不明白为什么 frame属性,应该为所有 XCUIElement 定义, 在第一种情况下找到,但在第二种情况下没有。

编辑

Oletha 在下面指出,我的常数 addShoppingItemTextFieldXCUIElementQuery当我尝试阅读 frame 时应该可以解决这个问题 textField 的属性(property).
事实上,当程序在测试错误断点处停止并打印它的描述时,我得到
Printing description of addShoppingItemTextField:
Query chain:
→Find: Target Application 0x6080000a6ea0
↪︎Find: Descendants matching type TextField
↪︎Find: Elements matching predicate '"TextField" IN identifiers'

但查找失败,尽管启用了辅助功能,并且辅助功能标识符设置为 TextField :

enter image description here

我还插入了应用程序
print(textField.accessibilityIdentifier!)

viewDidLoad() , 并打印出 TextField正确。

作为一种解决方法,我将测试设置为录制,然后点击 textField .这为访问 textField 创建了代码。 .然后我替换了 let addShoppingItemTextField = app.textFields["TextField"]由(右侧由录音生成):
let addShoppingItemTextField = app.otherElements.containing(.navigationBar, identifier:"WatchNotOK")
.children(matching: .other).element.children(matching: .other).element
.children(matching: .other).element

现在代码可以正常工作了。

所以在我看来,对 textField 的可访问性标识符的查询无法正常工作。

编辑 2

我放弃了:在不改变 Storyboard 中的任何内容的情况下,测试现在停止并在 let navBarHeight = mainViewNavigationBar.frame.size.height 行出现相同的测试错误(未找到匹配项:匹配谓词“WatchNotOK”IN 标识符的元素) .这确实一直有效。
这向我表明 Xcode UI 测试被破坏了。

最佳答案

我联系了 Apple,他们发现了我的错误:
我的主视图 Controller 的 View 有它的 accessibility属性设置为 true .这是错误的;它必须设置为 false :

enter image description here

解释见docsisAccessibilityElement :

此属性的默认值为 false,除非接收者是标准 UIKit 控件,在这种情况下该值为 true。
辅助应用程序只能获取有关由可访问性元素表示的对象的信息。因此,如果您实现残障用户应该可以访问的自定义控件或 View ,请将此属性设置为 true。这种做法的唯一异常(exception)是 View 仅用作应可访问的其他项目的容器。这样的 View 应该实现 UIAccessibilityContainer 协议(protocol)并将此属性设置为 false。

一旦我将主视图的可访问性设置为 false,UI 测试就成功了。

关于Xcode UITest 有时找不到 XCUIElement 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48075816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com