2

我正在尝试为我的登录页面编写 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”调用,那么它会正确键入我的文本。问题是:为什么当我没有告诉它时它会点击“下一步”键!?

4

1 回答 1

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

于 2016-03-24T23:35:57.427 回答