3

Я начинаю изучать UIAutomator на Android. Я создал простой проект poc, внутри этого есть очень немного элементов: одна кнопка и один editText. Поведение довольно просто: Когда я нажимаю botton, сообщение, написанное в editText, появляется в snackBar.Проверьте закусочную с помощью UiAutomator, есть ли способ?

Теперь я хочу сделать два простых теста:

  1. увидеть, если закусочная отображается правильно
  2. увидеть, если сообщение editTest будет правильно сообщили в закусочной

Для точки один I сделали так:

@Test 
public void pressEmailButton() throws UiObjectNotFoundException { 
    mDevice.findObject(By.res(POC_PACKAGE,"fab")).click(); 

    // wait for the snackBar appear 
    UiObject snackBar2 = new UiObject (new UiSelector().text("Send")); 

    // Verify the snackBarIsShowed is displayed in the Ui 
    assertTrue("Timeout while snackbar", snackBar2.waitForExists(1000)); 
} 

Это я наблюдая за действием закуски, чтобы проверить, правильно ли открыта закусочная. Есть ли лучшие способы сделать это? Таким образом, если есть несколько элементов, названных таким же образом при работе с закусочной, у меня будет проблема.

Для второго пункта я не могу найти способ проверить его. я должен использовать только uiAutomator и не Espresso :)

Спасибо всем :)

+0

Можете ли вы разместить изображение своей деятельности или иерархию верстки? Разве это не закутка, появляющаяся 'uiautomatorviewer'? – Rilwan

+0

это должно быть uiautomator или вы также можете использовать эспрессо-чеки? – stamanuel

ответ

0

Я просто попытался его в новом андроида проекта: У меня есть одна кнопки в основной раскладке и показать закусочный на кнопку мыши как это:

button = (Button) findViewById(R.id.button); 
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     View parentLayout = findViewById(R.id.root_layout); 
     Snackbar.make(parentLayout, "Snackbar Text", Snackbar.LENGTH_LONG) 
       .show(); 
     } 
}); 

в моем тесте я затем проверить это следующим образом:

//With espresso: 
onView(withId(R.id.button)).perform(click()); //click the button 
onView(withText("Snackbar Text")).check(matches(isDisplayed())); 

и то же самое с помощью пользовательского интерфейса Automator:

UiDevice mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); 
UiObject snackbarTextView = mDevice.findObject(new UiSelector().text("Snackbar Text")); 

if(!snackbarTextView.getText().equals("Snackbar Text")) { 
    throw new RuntimeException("No snackbar!"); 
} 

Оба теста работают нормально! Другой способ, чтобы выбрать текст закусочной будет через идентификатор ресурса, как это:

//replace the package name in the next line with your package name 
UiObject snackbarTextView = mDevice.findObject(new UiSelector().resourceId("com.example.testespressoapplication:id/snackbar_text")); 

, как вы делали это также работает, но не рекомендуется, так что я бы не использовать его, так как документация говорит:

* @deprecated Use {@link UiDevice#findObject(UiSelector)} instead. This version hides 
* UiObject's dependency on UiDevice and is prone to misuse.