XCUIApplication().textFields["hiddenTextField"].typeText("input") on UITextField

Posted

技术标签:

【中文标题】XCUIApplication().textFields["hiddenTextField"].typeText("input") on UITextField with CGRectZero Frame【英文标题】: 【发布时间】:2018-03-07 05:26:03 【问题描述】:

我的 ios 应用有一个不可见的 UITextField,我用它来捕获用户输入,然后在我自己的 UI 中显示它。

UITextField *hiddenTextField;
hiddenTextField = [[UITextField alloc] initWithFrame:CGRectZero];
hiddenTextField.accessibilityIdentifier = @"hiddenTextField";
[hiddenTextField addTarget:self action:@selector(hiddenTextFieldValueChanged:) forControlEvents:UIControlEventValueChanged];
hiddenTextField.delegate = self;
[self.view addSubview:hiddenTextField];

[hiddenTextField becomeFirstResponder];

它按预期工作。我正在尝试在 Swift 中编写自动化测试,其中包括对该字段的输入。

XCUIApplication().textFields["hiddenTextField"].typeText("input")

因为视图有一个 CGRectZero 帧,所以自动化失败并有响应:

没有找到查找的匹配项:后代匹配输入中的 TextField 类型

之前有没有人遇到过这种情况,您使用什么策略与测试中的 UI 进行交互?谢谢。

【问题讨论】:

这是一个非常非正统的 UI 设置。为什么不希望用户能够看到他们在文本字段中输入的内容? 用户仍然可以看到那里的输入。它只是映射到一个 UILabel,所以我们可以更好地控制它的外观。 【参考方案1】:

根据 Apple 网站上的 documentation,只要键盘处于活动状态,您就可以对作为焦点响应者祖先的任何元素使用 typeText 方法:

元素或后代必须有键盘焦点;否则会引发错误。

鉴于上述情况,您应该能够使用以下内容在应用程序上简单地键入:

XCUIApplication().typeText("input")

【讨论】:

以上是关于XCUIApplication().textFields["hiddenTextField"].typeText("input") on UITextField的主要内容,如果未能解决你的问题,请参考以下文章

XCUIApplication 替换 UIATarget captureScreenWithName()

XCUIApplication 的通用点击函数

可以在调用 `XCUIApplication().terminate()` 后阻止 XCode 调用调试器

如何在 swift UITests 中的 XCUIApplication 中设置暗模式?

如何从 XCUIApplication 对象访问当前的 SceneDelegate?

XCUIApplication 仅适用于 iOS 9.0 或更新版本,swift3