Android элементы текстового поля доступны для записи, но не редактируются - PullRequest
0 голосов
/ 13 апреля 2020

Я играю с Xamarin UITest и заметил, что на моем устройстве Android (Samsung S10E, v. 10) Xamarin UITest (v. 3.0.7), когда я нажимаю на элемент ввода текста, я не могу затем ввести текст внутри этого элемента.

Элемент ввода фокусируется курсором внутри поля ввода, и отображается клавиатура, но текст не вводится. Чтобы добавить еще один уровень сложности, мой тест проходит и не дает, даже если текст не был введен.

Вот мой код:

app.WaitForElement(c => c.Class("UsernameID"));
            Thread.Sleep(3000);
            app.EnterText(c => c.Id("UsernameID"), "Password1");

Кроме того, попробовал это:

app.EnterText(c => c.TextField("LoginUserIDEntry"), "oaqa_Clark6_ps");

Я вставил спящий поток на случай, если клавиатура не загружалась вовремя для EnterText вызов.

Тот же код на iOS отлично работает.

Я понимаю, что Xamarin.UITest не использует программную клавиатуру. Вместо этого он внедряется между программной клавиатурой и приложением и имитирует нажатия клавиш. В то время как iOS фактически имитирует нажатия на клавиатуру.

Может кто-нибудь сказать мне, если это проблема синтаксиса, проблема устройства c или проблема Xamarin?

1 Ответ

0 голосов
/ 14 апреля 2020

Чтобы идентифицировать элемент xamarin, вам необходимо использовать поле x:Name или даже AutomationId в общем проекте xaml.

Класс попытается найти его по имени класса в родной android или iOS. Маловероятно, что имена классов на обеих платформах совпадают с тем, что вы, вероятно, упоминали в первом блоке кода.

Чтобы быть обобщенным c вы должны в основном использовать Marked должен работать UITest projext

<Entry x:Name="entryXName" AutomationId="entryAutoId" />
app.EnterText(c => c.Marked("entryXName"), "oaqa_Clark6_ps");
//by id
app.EnterText(x=> x.Id("entryAutoId"),"foobarblahblackship");

Здесь есть целая хорошая документация на официальном сайте

Вы также можете проверить образец .

Я узнал, что Thread.Sleep заблокирует основной поток пользовательского интерфейса, вместо этого вы должны использовать await Task.Delay

...