Учебники

Espresso Testing Framework — Просмотр совпадений

Фреймворк эспрессо предоставляет множество видов соответствия. Целью сопоставления является сопоставление представления с использованием различных атрибутов представления, таких как Id, Text и доступность дочернего представления. Каждый сопоставитель соответствует определенным атрибутам представления и применяется к определенному типу представления. Например, сопоставление withId сопоставляет свойство Id представления и применяется ко всему представлению, тогда как сопоставление withText сопоставляет свойство Text представления и применяется только к TextView .

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

Библиотека Хамкрест

Библиотека Hamcrest является важной библиотекой в ​​сфере тестирования эспрессо. Hamcrest сам по себе является основой для написания объектов соответствия. Фреймворк Espresso широко использует библиотеку Hamcrest и расширяет ее по мере необходимости, обеспечивая простые и расширяемые средства сравнения.

Hamcrest предоставляет простую функцию assertThat и набор соответствий для утверждения любых объектов. assertThat имеет три аргумента, и они как показано ниже —

  • Строка (описание теста, необязательно)

  • Объект (актуальный)

  • Matcher (ожидается)

Строка (описание теста, необязательно)

Объект (актуальный)

Matcher (ожидается)

Давайте напишем простой пример, чтобы проверить, имеет ли объект списка ожидаемое значение.

import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.MatcherAssert.assertThat;
@Test
public void list_hasValue() {
   ArrayList<String> list = new ArrayList<String>();
   list.add("John");
   assertThat("Is list has John?", list, hasItem("John"));
}

Здесь hasItem возвращает совпадение , которое проверяет, имеет ли фактический список указанное значение в качестве одного из элементов.

В Hamcrest имеется множество встроенных сопоставителей, а также есть опции для создания новых сопоставителей. Вот некоторые из важных встроенных средств сравнения, полезных в среде тестирования эспрессо:

что угодно — всегда соответствует

Логические совпадения

  • allOf — принимать любое количество совпадений и совпадений только в том случае, если все совпадения пройдены успешно.

  • anyOf — принять любое количество совпадений и совпадений, если удастся выполнить одно совпадение.

  • not — принять одно совпадение и совпадения только в случае сбоя сопоставления и наоборот.

allOf — принимать любое количество совпадений и совпадений только в том случае, если все совпадения пройдены успешно.

anyOf — принять любое количество совпадений и совпадений, если удастся выполнить одно совпадение.

not — принять одно совпадение и совпадения только в случае сбоя сопоставления и наоборот.

Текстовые совпадения

  • equalToIgnoringCase — используется для проверки, равен ли фактический ввод ожидаемому регистру игнорирования строки.

  • equalToIgnoringWhiteSpace — используется для проверки, равен ли фактический ввод заданной строке, игнорируя регистр и пробелы.

  • containsString — используется для проверки того, содержит ли фактический ввод указанную строку.

  • endWith — используется для проверки, начинается ли фактический ввод с указанной строки.

  • startWith — используется для проверки того, заканчивается ли ввод указанной строкой.

equalToIgnoringCase — используется для проверки, равен ли фактический ввод ожидаемому регистру игнорирования строки.

equalToIgnoringWhiteSpace — используется для проверки, равен ли фактический ввод заданной строке, игнорируя регистр и пробелы.

containsString — используется для проверки того, содержит ли фактический ввод указанную строку.

endWith — используется для проверки, начинается ли фактический ввод с указанной строки.

startWith — используется для проверки того, заканчивается ли ввод указанной строкой.

Числовые совпадения

  • closeTo — используется для проверки, близок ли фактический ввод к ожидаемому числу.

  • moreThan — используется для проверки того, больше ли фактический ввод, чем ожидаемое число.

  • moreThanOrEqualTo — используется для проверки того, является ли фактический ввод больше или равен ожидаемому числу.

  • lessThan — используется для проверки того, меньше ли фактический ввод ожидаемого числа.

  • lessThanOrEqualTo — используется для проверки того, является ли фактический вход меньше или равен ожидаемому числу.

closeTo — используется для проверки, близок ли фактический ввод к ожидаемому числу.

moreThan — используется для проверки того, больше ли фактический ввод, чем ожидаемое число.

moreThanOrEqualTo — используется для проверки того, является ли фактический ввод больше или равен ожидаемому числу.

lessThan — используется для проверки того, меньше ли фактический ввод ожидаемого числа.

lessThanOrEqualTo — используется для проверки того, является ли фактический вход меньше или равен ожидаемому числу.

Сопоставление объектов на основе

  • equalTo — используется для проверки, равен ли фактический ввод ожидаемому объекту

  • hasToString — используется для проверки, имеет ли фактический ввод метод toString.

  • instanceOf — используется для проверки того, является ли фактический ввод экземпляром ожидаемого класса.

  • isCompatibleType — используется для проверки совместимости фактического ввода с ожидаемым типом.

  • notNullValue — используется для проверки, не является ли фактический ввод нулевым.

  • sameInstance — используется для проверки того, являются ли фактические входные и ожидаемые значения одинаковыми.

  • hasProperty — используется для проверки того, имеет ли фактический ввод ожидаемое свойство

equalTo — используется для проверки, равен ли фактический ввод ожидаемому объекту

hasToString — используется для проверки, имеет ли фактический ввод метод toString.

instanceOf — используется для проверки того, является ли фактический ввод экземпляром ожидаемого класса.

isCompatibleType — используется для проверки совместимости фактического ввода с ожидаемым типом.

notNullValue — используется для проверки, не является ли фактический ввод нулевым.

sameInstance — используется для проверки того, являются ли фактические входные и ожидаемые значения одинаковыми.

hasProperty — используется для проверки того, имеет ли фактический ввод ожидаемое свойство

это — сахар или короткий путь для равных

Matchers

Espresso предоставляет метод onView () для сопоставления и поиска представлений. Он принимает сопоставления представлений и возвращает объект ViewInteraction для взаимодействия с сопоставленным представлением. Часто используемый список сопоставлений представлений описан ниже —

withId ()

withId () принимает аргумент типа int, а аргумент ссылается на идентификатор представления. Возвращает совпадение, которое соответствует представлению, используя идентификатор представления. Пример кода выглядит следующим образом:

onView(withId(R.id.testView))

withText ()

withText () принимает аргумент типа string, а аргумент ссылается на значение свойства text представления. Он возвращает совпадение, которое соответствует представлению, используя текстовое значение представления. Это относится только к TextView . Пример кода выглядит следующим образом:

onView(withText("Hello World!"))

withContentDescription ()

withContentDescription () принимает аргумент типа string, а аргумент ссылается на значение свойства описания содержимого представления. Возвращает совпадение, которое соответствует представлению, используя описание представления. Пример кода выглядит следующим образом:

onView(withContentDescription("blah"))

Мы также можем передать идентификатор ресурса текстового значения вместо самого текста.

onView(withContentDescription(R.id.res_id_blah))

hasContentDescription ()

hasContentDescription () не имеет аргумента. Он возвращает совпадение, которое соответствует представлению, имеющему любое описание содержимого. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.my_view_id), hasContentDescription()))

withTagKey ()

withTagKey () принимает аргумент типа string, а аргумент ссылается на ключ тега представления. Он возвращает совпадение, которое соответствует представлению, используя его ключ тега. Пример кода выглядит следующим образом:

onView(withTagKey("blah"))

Мы также можем передать идентификатор ресурса имени тега вместо самого имени тега.

onView(withTagKey(R.id.res_id_blah))

withTagValue ()

withTagValue () принимает аргумент типа Matcher <Object>, и этот аргумент ссылается на значение тега представления. Он возвращает совпадение, которое соответствует представлению, используя его значение тега. Пример кода выглядит следующим образом:

onView(withTagValue(is((Object) "blah")))

Вот Хэмкрест Матчер.

withClassName ()

withClassName () принимает аргумент типа Matcher <String>, и этот аргумент ссылается на значение имени класса представления. Он возвращает совпадение, которое соответствует представлению, используя его имя класса. Пример кода выглядит следующим образом:

onView(withClassName(endsWith("EditText")))

Здесь endWith совпадает с Hamcrest и возвращает Matcher <String>

withHint ()

withHint () принимает аргумент типа Matcher <String>, и этот аргумент ссылается на значение подсказки представления. Возвращает совпадение, которое соответствует представлению, используя подсказку представления. Пример кода выглядит следующим образом:

onView(withClassName(endsWith("Enter name")))

withInputType ()

withInputType () принимает аргумент типа int, а аргумент ссылается на тип ввода представления. Он возвращает совпадение, которое соответствует представлению, используя его тип ввода. Пример кода выглядит следующим образом:

onView(withInputType(TYPE_CLASS_DATETIME))

Здесь TYPE_CLASS_DATETIME ссылается на представление редактирования, поддерживающее дату и время.

withResourceName ()

withResourceName () принимает аргумент типа Matcher <String>, и этот аргумент ссылается на значение имени класса представления. Он возвращает совпадение, которое соответствует представлению, используя имя ресурса представления. Пример кода выглядит следующим образом:

onView(withResourceName(endsWith("res_name")))

Он также принимает строковый аргумент. Пример кода выглядит следующим образом:

onView(withResourceName("my_res_name"))

withAlpha ()

withAlpha () принимает аргумент типа float, и этот аргумент ссылается на альфа-значение представления. Он возвращает совпадение, которое соответствует представлению, используя альфа-значение представления. Пример кода выглядит следующим образом:

onView(withAlpha(0.8))

withEffectiveVisibility ()

withEffectiveVisibility () принимает аргумент типа ViewMatchers.Visibility, и этот аргумент ссылается на эффективную видимость представления. Возвращает сопоставление, которое соответствует представлению, используя видимость представления. Пример кода выглядит следующим образом:

onView(withEffectiveVisibility(withEffectiveVisibility.INVISIBLE))

withSpinnerText ()

withSpinnerText () принимает аргумент типа Matcher <String>, и этот аргумент ссылается на текущее значение выбранного представления Spinner. Он возвращает совпадение, которое соответствует счетчику на основе значения toString выбранного элемента. Пример кода выглядит следующим образом:

onView(withSpinnerText(endsWith("USA")))

Он также принимает строковый аргумент или идентификатор ресурса строки. Пример кода выглядит следующим образом:

onView(withResourceName("USA"))
onView(withResourceName(R.string.res_usa))

withSubstring ()

Метод withSubString () похож на метод withText (), за исключением того, что он помогает проверить подстроку текстового значения представления.

onView(withSubString("Hello"))

hasLinks ()

hasLinks () не имеет аргументов и возвращает совпадение, которое соответствует представлению, имеющему ссылки. Это относится только к TextView. Пример кода выглядит следующим образом:

onView(allOf(withSubString("Hello"), hasLinks()))

Здесь allOf — это матч Хэмкрест. allOf возвращает сопоставление, которое соответствует всем переданным в сопоставителях, и здесь оно используется для сопоставления представления, а также для проверки наличия в представлении ссылок в его текстовом значении.

hasTextColor ()

hasTextColor () принимает один аргумент типа int, и этот аргумент ссылается на идентификатор ресурса цвета. Он возвращает совпадение, которое соответствует TextView в зависимости от его цвета. Это относится только к TextView . Пример кода выглядит следующим образом:

onView(allOf(withSubString("Hello"), hasTextColor(R.color.Red)))

hasEllipsizedText ()

hasEllipsizedText () не имеет аргумента. Он возвращает совпадение, которое соответствует TextView с длинным текстом, имеющим эллиптический размер (первый … десять … последний) или обрезанный (первый …). Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.my_text_view_id), hasEllipsizedText()))

hasMultilineText ()

hasMultilineText () не имеет аргумента. Он возвращает совпадение, которое совпадает с TextView, имеющим любой многострочный текст. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.my_test_view_id), hasMultilineText()))

hasBackground ()

hasBackground () принимает один аргумент типа int, и этот аргумент ссылается на идентификатор ресурса фонового ресурса. Он возвращает сопоставление, которое соответствует представлению на основе его фоновых ресурсов. Пример кода выглядит следующим образом:

onView(allOf(withId("image"), hasBackground(R.drawable.your_drawable)))

hasErrorText ()

hasErrorText () принимает аргумент типа Matcher <String>, и этот аргумент ссылается на строковое значение ошибки представления (EditText). Он возвращает совпадение, которое соответствует представлению, используя строку ошибки представления. Это относится только к EditText . Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.editText_name), hasErrorText(is("name is required"))))

Он также принимает строковый аргумент. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.editText_name), hasErrorText("name is required")))

hasImeAction ()

hasImeAction () принимает аргумент типа Matcher <Integer>, и этот аргумент ссылается на поддерживаемые методы ввода представления (EditText). Он возвращает совпадение, которое соответствует представлению, используя поддерживаемый метод ввода представления. Это относится только к EditText . Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.editText_name),
hasImeAction(is(EditorInfo.IME_ACTION_GO))))

Здесь EditorInfo.IME_ACTION_GO является одним из параметров методов ввода. hasImeAction () также принимает целочисленный аргумент. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.editText_name),
hasImeAction(EditorInfo.IME_ACTION_GO)))

supportsInputMethods ()

supportInputMethods () не имеет аргументов. Он возвращает совпадение, которое соответствует представлению, если оно поддерживает методы ввода. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.editText_name), supportsInputMethods()))

isRoot ()

isRoot () не имеет аргументов. Возвращает совпадение, которое соответствует корневому представлению. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.my_root_id), isRoot()))

isDisplayed ()

isDisplayed () не имеет аргументов. Возвращает сопоставление, которое соответствует представлению, отображаемому в данный момент. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.my_view_id), isDisplayed()))

isDisplayingAtLeast ()

isDisplayingAtLeast () принимает один аргумент типа int. Он возвращает сопоставление, которое соответствует текущему отображению, отображаемому как минимум с указанным процентом. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.my_view_id), isDisplayingAtLeast(75)))

isCompletelyDisplayed ()

isCompletelyDisplayed () не имеет аргументов. Он возвращает сопоставление, которое соответствует представлению, которое в данный момент отображается полностью на экране. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.my_view_id), isCompletelyDisplayed()))

включен()

isEnabled () не имеет аргумента. Он возвращает совпадение, которое соответствует представлению, которое включено. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.my_view_id), isEnabled()))

isFocusable ()

isFocusable () не имеет аргумента. Он возвращает совпадение, которое соответствует представлению, которое имеет опцию фокусировки. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.my_view_id), isFocusable()))

HasFocus ()

hasFocus () не имеет аргументов. Он возвращает совпадение, которое соответствует представлению, которое в данный момент сфокусировано. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.my_view_id), hasFocus()))

isClickable ()

isClickable () не имеет аргументов. Он возвращает совпадение, которое соответствует представлению, которое является опцией щелчка. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.my_view_id), isClickable()))

IsSelected ()

isSelected () не имеет аргумента. Возвращает сопоставление, которое соответствует представлению, выбранному в данный момент. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.my_view_id), isSelected()))

проверено()

isChecked () не имеет аргументов. Он возвращает совпадение, которое соответствует представлению, имеющему тип CompoundButton (или его подтип) и находящемуся в проверенном состоянии. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.my_view_id), isChecked()))

isNotChecked ()

isNotChecked () прямо противоположен isChecked. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.my_view_id), isNotChecked()))

isJavascriptEnabled ()

isJavascriptEnabled () не имеет аргументов. Он возвращает сопоставитель, который соответствует WebView, который оценивает JavaScript. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.my_webview_id), isJavascriptEnabled()))

withParent ()

withParent () принимает один аргумент типа Matcher <View>. Аргумент относится к мнению. Он возвращает совпадение, которое соответствует представлению, что указанное представление является родительским представлением. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.childView), withParent(withId(R.id.parentView))))

hasSibling ()

hasSibling () принимает один аргумент типа Matcher> View <. Аргумент относится к мнению. Он возвращает сопоставление, которое соответствует представлению, которое переданное представление является одним из его родственного представления. Пример кода выглядит следующим образом:

onView(hasSibling(withId(R.id.siblingView)))

с ребенком()

withChild () принимает один аргумент типа Matcher <View>. Аргумент относится к мнению. Он возвращает сопоставление, которое соответствует представлению, что переданное представление является дочерним представлением. Пример кода выглядит следующим образом:

onView(allOf(withId(R.id.parentView), withChild(withId(R.id.childView))))

hasChildCount ()

hasChildCount () принимает один аргумент типа int. Аргумент ссылается на количество дочерних элементов представления. Он возвращает совпадение, которое соответствует представлению, которое имеет точно такое же количество дочерних представлений, как указано в аргументе. Пример кода выглядит следующим образом:

onView(hasChildCount(4))

hasMinimumChildCount ()

hasMinimumChildCount () принимает один аргумент типа int. Аргумент ссылается на количество дочерних элементов представления. Он возвращает совпадение, которое соответствует представлению, имеющему, по крайней мере, номер дочернего представления, указанного в аргументе. Пример кода выглядит следующим образом:

onView(hasMinimumChildCount(4))

hasDescendant ()

hasDescendant () принимает один аргумент типа Matcher <View>. Аргумент относится к мнению. Он возвращает сопоставление, которое соответствует представлению, в котором переданное представление является одним из представлений-потомков в иерархии представлений. Пример кода выглядит следующим образом:

onView(hasDescendant(withId(R.id.descendantView)))

isDescendantOfA ()

isDescendantOfA () принимает один аргумент типа Matcher <View>. Аргумент относится к мнению. Он возвращает сопоставление, которое соответствует представлению, что переданное представление является одним из представлений предка в иерархии представлений. Пример кода выглядит следующим образом: