我该如何测试现场验证?

时间:2015-03-18 23:13:56

标签: calabash calabash-android

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

field.setError(errorMessage);

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

现在我希望calabash验证该字段验证失败。至少目前我并不关心具体的错误信息 - 我只是想知道显示错误信息(或者我很乐意为感叹号解决,但因为我无法使用查询找到它在控制台中,我怀疑会更难)。

此查询:

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,但无法显示后续EditTexts的错误消息窗口。为什么?什么是正确的方法?

1 个答案:

答案 0 :(得分:1)

calabash命令有很多内容可能导致测试失败。

1)不要使用touch(查询(...

# 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模拟用户按输入键而不是输入键。