2

Я пытаюсь проверить свое приложение google signup/login feature, particularly случай, когда пользователь пытается добавить новую учетную запись, которая не указана в диалоговом окне.Ввод текста с помощью UiAutomator Android

Используемая настройка соответствует настройке «добавить учетную запись» по умолчанию.

Проблема у меня в том, что я не могу показаться, чтобы ввести электронную почту, когда приложение запрашивает его, а затем нажмите кнопку «Next»

Вот мой код

 // Find add account button using uiautomator 
     UiObject addButton = mDevice.findObject(new UiSelector().resourceId("android:id/button2")); 
     assertEquals(true, addButton.exists()); 
     // Click the button 

     // Fill email text box 
     UiObject emailBox = mDevice.findObject(new UiSelector().resourceId("identifierId")); 
     emailBox.waitForExists(TIMEOUT); 
     assertEquals(true, emailBox.exists()); 
     emailBox.legacySetText(googleEmail); 

     // Find 'NEXT' Button 
     UiObject nextButton = mDevice.findObject(new UiSelector().resourceId("identifierNext")); 
     assertEquals(true, nextButton.exists()); 
     nextButton.click(); 

     // Fill password 
     UiObject passwordBox = mDevice.findObject(new UiSelector().resourceId("password")); 
     passwordBox.waitForExists(TIMEOUT); 
     assertEquals(true, passwordBox.exists()); 
     emailBox.clearTextField(); 
     emailBox.setText(googlePassword); 

     // Find 'NEXT' Button 
     nextButton = mDevice.findObject(new UiSelector().resourceId("next")); 
     assertEquals(true, nextButton.exists()); 
     nextButton.click(); 

     // Find 'ACCEPT' Button 
     nextButton = mDevice.findObject(new UiSelector().resourceId("next")); 
     nextButton.waitForExists(TIMEOUT); 
     assertEquals(true, nextButton.exists()); 
     nextButton.click(); 

Приложение попадает на экран, где должно быть напечатано письмо, и оно не прерывается на "assertEquals(true, emailBox.exists());", поэтому я считаю, что приложение правильно его обнаруживает.

Я также пробовал использовать "setText" вместо "legacySetText", и строка вводится, но затем кнопка «next» не включена.

Кроме того, иногда клавиатура всплывает и текст набирается, но это кажется случайным, и я не могу воспроизвести его по своему усмотрению.

Что я здесь делаю неправильно?

EDIT:

Я прокомментировал остальной код и изменил кнопку утверждения и, как ожидается, кнопка «рядом» не получает включен, потому что текст не был напечатан.

// Find add account button using uiautomator 
     UiObject addButton = mDevice.findObject(new UiSelector().resourceId("android:id/button2")); 
     assertEquals(true, addButton.exists()); 
     // Click the button 
     addButton.click(); 

     // Fill email text box 
     UiObject emailBox = mDevice.findObject(new UiSelector().resourceId("identifierId").descriptionContains("Enter your email ")); 
     emailBox.waitForExists(TIMEOUT); 
     assertEquals(true, emailBox.exists()); 
     emailBox.legacySetText(googleEmail); 

     // Find 'NEXT' Button 
     UiObject nextButton = mDevice.findObject(new UiSelector().resourceId("identifierNext")); 
     assertEquals(true, nextButton.isEnabled()); 
     nextButton.click(); 

ошибка говорит, что он ожидает правда, но результат был ложным на «assertEquals (правда, nextButton.isEnabled());» line

EDIT 2: Я нашел, что проблема заключается в том, как текст интерпретируется на странице входа в Google.

С uiautomatorviewer я взял снимок экрана и просмотрел поле EditText, в котором я написал текст вручную. Я обнаружил, что текст, который я написал, не заполнил текстовый атрибут, но вместо этого он перешел к атрибуту описания содержимого.

Моя проблема в том, что я нашел способ редактировать текст с помощью метода setText из фреймворка. Я попытался щелкнуть мышью по просмотру, а затем установить текст, но без успеха. Есть ли способ изменить описание содержимого с помощью uiautomator?

+0

Вы можете набрать текст текстом 'adb shell input text your_text'? – Rilwan

ответ

1

вместо:

emailBox.legacySetText(googleEmail); 

пытаются написать такой код:

// click the admin button 
new UiObject(new UiSelector().text("admin")).click(); 
// set pwd text 
new UiObject(new UiSelector().description("pwdEditText")).setText("admin"); 
// click login button 
new UiObject(new UiSelector().description("loginButton")).click(); 

Я думаю, вы могли бы также найти очень полезно для написания тестов в Espresso. Я думаю, что для этой цели он гораздо более приспособлен. uiatomator было бы лучше получить разрешение или уведомления или блокировку экрана, и это работает как шарм с Espresso.Оба разработаны Google:

проверить этот сайт, чтобы узнать больше о них: https://google.github.io/android-testing-support-library/

Проверки EditText с Espresso: Updating an EditText with Espresso

Надеется, что это поможет

+0

Я пробовал это, прежде чем выполнять этот тест с помощью uiautomator, но я не смог получить эспрессо, чтобы обнаружить элементы внутри webview. Я считаю, что проблема связана с заданным текстом, поскольку поле, которое заполняется, когда я набираю текст вручную, является описанием содержимого. – PeachMode

+0

для тестирования WebView в Espresso вам необходимо использовать espresso-web - у эспрессо есть специальный libraary для этого представления. Проверьте также новую ссылку выше – piotrek1543

0

Я могу подписать в с Gmail и удалите любую настроенную учетную запись gmail на устройстве. 100% работает и ежедневно работает с костюмом.

final UiDevice mDevice=    
UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); 
final int timeOut = 1000 * 60; 
mDevice.wait(Until.findObject(By.clazz(WebView.class)), timeOut); 

    // Set Login 
    UiObject emailInput = mDevice.findObject(new UiSelector() 
      .instance(0) 
      .className(EditText.class)); 

    emailInput.waitForExists(timeOut); 
    emailInput.setText("your - Email");// please set your email-id here 
    // Confirm Button Click 
    UiObject Next = mDevice.findObject(new UiSelector() 
      .resourceId("identifierNext")); 
    Next.waitForExists(timeOut); 
    Next.click(); 

    // Set Password 
    UiObject passwordInput = mDevice.findObject(new UiSelector() 
      .resourceId("password")); 

    passwordInput.waitForExists(timeOut); 
    passwordInput.setText("password");// type your password here 

    // Confirm Button Click 
    Next = mDevice.findObject(new UiSelector() 
      .resourceId("passwordNext")); 
    Next.waitForExists(timeOut); 
    Next.click(); 

    UiObject nextButton = mDevice.findObject(new UiSelector() 
      .resourceId("next")); 
    nextButton.waitForExists(timeOut); 
    nextButton.click(); 
    UiObject layout = mDevice.findObject(new UiSelector() 
    .resourceId("suw_layout_content")); 
    layout.waitForExists(timeOut); 
    ElapsedTimeIdlingResource.WaitForScreenContentLoad(5); 
    UiObject buttonNext = mDevice.findObject(new UiSelector() 
      .className(Button.class)); 
    buttonNext.waitForExists(timeOut); 
    assertEquals(false, nextButton.exists()); 
    buttonNext.click(); 
    ElapsedTimeIdlingResource.WaitForScreenContentLoad(50); 
Смежные вопросы