У меня есть код проверки, который устанавливает ошибку 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, но не отображают окно сообщения об ошибке для последующих EditText. Почему? Как правильно это сделать?