0

我有验证代码,当它不满足要求时,它会设置 EditText 的错误。

field.setError(errorMessage);

这会在字段上方放置一个带有感叹号的红色小圆圈,当我触摸该字段时,它会在黑框中显示我的错误消息。伟大的!

现在我想让 calbash 验证该字段是否未通过验证。目前至少我不关心具体的错误消息 - 我只想知道显示了一条错误消息(或者我很乐意接受感叹号,但因为我无法使用查询找到它在控制台中,我怀疑这会更难)。

这个查询:

query("android.widget.PopupWindow$PopupViewContainer")

查找错误消息窗口(如果存在)。

但只有当有错误的字段有焦点时才会出现。而且我只在字段失去焦点时设置错误。应该没问题 - 我的步骤可以在字段中输入文本,离开字段,然后返回。当我手动执行这些操作时,会显示错误消息窗口。我还不能做的是编写一个步骤来完成这些事情并可靠地显示错误消息窗口。我努力了

query("EditText id:'#{field_id}'", {:setText => bad_text})
touch(query("* id:'#{another_field_id}'")[0])
touch(query("* id:'#{field_id}'")[0])

query("EditText id:'#{field_id}'", {:setText => bad_text})
system("#{default_device.adb_command} shell input keyevent KEYCODE_TAB")
touch(query("* id:'#{field_id}'")[0])

并且对于第一个 EditText,这两个行为都正确,但无法为后续 EditText 显示错误消息窗口。为什么?这样做的正确方法是什么?

4

1 回答 1

1

您的 calabash 命令有多种情况可能导致您的测试失败。

1)不要使用触摸(查询(...

# bad
touch(query("q"))
# good
touch("q")

2)不要使用'setText'来模拟输入文字

# bad
query("EditText", {:setText => 'bad_text'})
# good
enter_text("EditText", 'bad_text')

3)不要使用任何输入事件

用户无法在大多数设备上执行诸如此类的输入事件system("#{default_device.adb_command} shell input keyevent KEYCODE_TAB"),因为很少有 Android 设备具有物理键盘。用于press_user_action_button模拟用户按下出现的输入键而不是回车键。

于 2015-03-19T14:57:43.797 回答