EarlGrey失败 - "键盘在辞职第一响应者状态后没有消失"

时间:2016-03-24 19:51:55

标签: ios ui-testing earlgrey

我正在尝试为我的登录页面编写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;当我不告诉它时关键!?

1 个答案:

答案 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状态传递给另一个文本字段。