我正在尝试为我的登录页面编写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>>}
&#34;在辞退第一响应者状态&#34后,键盘没有消失;
任何人都知道这里发生了什么?奇怪的是,顺便说一句,看起来EarlGrey在错误输出之前就选择了下一个字段(密码字段)。我根本没有UI代码来选择密码字段。
更新:我正在使用返回键类型&#34;下一步&#34;在此文本字段上,以便当用户点击返回键时,我将它们带到下一个字段(密码字段)。为此,当点击Next键时,我在该文本字段上重新签名firstResponder,并调用&#34; becomeFirstResponder&#34;在密码字段上。
这导致EarlGray错误输出,因为如果我删除&#34; resignFirstResponder&#34;调用,然后它正确键入我的文本。问题是:为什么要点击&#34;接下来&#34;当我不告诉它时关键!?
答案 0 :(得分:0)
它看起来像是EarlGray源代码中的一个错误。 GREYActions.m第182行
// If the view already is the first responder and had autocorrect enabled, it must
// resign and become first responder for the autocorrect type change to take effect.
[firstResponder resignFirstResponder];
没有检查以确定视图以前是否启用了自动更正。因此,所有文本字段都将调用“resignFirstResponder”。这对于像我这样的设置是有问题的,其中resigningFirstResponder然后将firstResponder状态传递给另一个文本字段。