我正在尝试为我的登录页面编写 UI 测试。该页面有一些介绍动画,一个搜索字段(用于查找要连接的正确服务器),然后一旦他们选择了正确的服务器,就会出现一个用户名和密码字段。
到目前为止,这是我的测试:
[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"searchTextField")]
assertWithMatcher:grey_sufficientlyVisible()];
[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"searchTextField")] performAction:grey_typeText(@"gtX9Vn23k1")];
[[EarlGrey selectElementWithMatcher:grey_anyOf([self matcherForUITableViewCell], nil)] performAction:grey_tap()];
[[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"usernameTextField")]
assertWithMatcher:grey_interactable()] performAction:grey_tap()];
[[[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"usernameTextField")]
assertWithMatcher:grey_interactable()] performAction:[GREYActions actionForTypeText:@"Why isnt this working?"]];
此测试失败。
EarlGrey 正确选择并键入第一个文本字段 (searchTextField)。
EarlGrey 正确选择了 tableview 单元格!
然后,EarlGrey 正确选择了 usernameTextField,但随后无法键入文本,超时后出现以下错误:
Exception: ActionFailedException
Reason: Action 'Type "Why isnt this working"' failed.
Element matcher: (respondsToSelector(accessibilityIdentifier) && accessibilityID("usernameTextField"))
Complete Error: Error Domain=com.google.earlgrey.ElementInteractionErrorDomain Code=1 "Keyboard did not disappear after resigning first responder status of <GHDLoginTextField: 0x7fa96a616bd0; baseClass = UITextField; frame = (150 387; 468 29); text = ''; opaque = NO; autoresize = RM+BM; tintColor = UIDeviceWhiteColorSpace 1 1; gestureRecognizers = <NSArray: 0x7fa96a55d5d0>; layer = <CALayer: 0x7fa96a616a80>>" UserInfo={NSLocalizedDescription=Keyboard did not disappear after resigning first responder status of <GHDLoginTextField: 0x7fa96a616bd0; baseClass = UITextField; frame = (150 387; 468 29); text = ''; opaque = NO; autoresize = RM+BM; tintColor = UIDeviceWhiteColorSpace 1 1; gestureRecognizers = <NSArray: 0x7fa96a55d5d0>; layer = <CALayer: 0x7fa96a616a80>>}
“退出第一响应者状态后键盘没有消失”
有人知道这里发生了什么吗?奇怪的是,顺便说一句,看起来 EarlGrey 在出错之前选择了下一个字段(密码字段)。我根本没有用于选择密码字段的 UI 代码。
更新:我在此文本字段上使用返回键类型“下一步”,因此当用户点击返回键时,我会将它们带到下一个字段(密码字段)。为此,当按下 Next 键时,我在该文本字段上退出 firstResponder,并在密码字段上调用“becomeFirstResponder”。
这导致 EarlGray 出错,因为如果我删除“resignFirstResponder”调用,那么它会正确键入我的文本。问题是:为什么当我没有告诉它时它会点击“下一步”键!?