Учебники

Espresso Testing Framework — WebView

WebView — это специальный вид, предоставляемый Android для отображения веб-страниц внутри приложения. WebView не предоставляет все функции полноценного браузера, такого как Chrome и Firefox. Тем не менее, он обеспечивает полный контроль над отображаемым содержимым и предоставляет все функции Android, которые должны вызываться на веб-страницах. Он включает WebView и предоставляет специальную среду, в которой пользовательский интерфейс может быть легко спроектирован с использованием технологии HTML и встроенных функций, таких как камера и набор номера. Этот набор функций позволяет WebView предоставлять приложение нового типа, называемое гибридным приложением , где пользовательский интерфейс выполняется в HTML, а бизнес-логика — в JavaScript или через внешнюю конечную точку API.

Как правило, тестирование WebView должно быть сложной задачей, поскольку он использует технологию HTML для своих элементов пользовательского интерфейса, а не собственного пользовательского интерфейса / представлений. Эспрессо выделяется в этой области, предоставляя новый набор для веб-сопоставлений и веб-утверждений, который намеренно похож на нативные сопоставления представлений и утверждений представлений. В то же время он обеспечивает сбалансированный подход, включая также среду тестирования на основе веб-технологий.

Espresso web построен на платформе WebDriver Atom, которая используется для поиска и управления веб-элементами. Атом похож на просмотр действий. Атом будет делать все взаимодействие внутри веб-страницы. WebDriver предоставляет предопределенный набор методов, таких как findElement () , getElement () для поиска веб-элементов и возвращает соответствующие атомы (для выполнения действий на веб-странице).

Стандартное заявление о веб-тестировании выглядит следующим образом:

onWebView()
   .withElement(Atom)
   .perform(Atom)
   .check(WebAssertion)

Вот,

  • onWebView () — Подобно onView (), он предоставляет набор API для тестирования WebView.

  • withElement () — один из нескольких методов, используемых для поиска веб-элементов внутри веб-страницы с использованием Atom и возврата объекта WebInstruction, который аналогичен ViewInteraction.

  • execute () — выполняет действие внутри веб-страницы с помощью Atom и возвращает WebInteraction.

  • check () — это делает необходимое утверждение с помощью WebAssertion.

onWebView () — Подобно onView (), он предоставляет набор API для тестирования WebView.

withElement () — один из нескольких методов, используемых для поиска веб-элементов внутри веб-страницы с использованием Atom и возврата объекта WebInstruction, который аналогичен ViewInteraction.

execute () — выполняет действие внутри веб-страницы с помощью Atom и возвращает WebInteraction.

check () — это делает необходимое утверждение с помощью WebAssertion.

Пример кода веб-тестирования выглядит следующим образом:

onWebView()
   .withElement(findElement(Locator.ID, "apple"))
   .check(webMatches(getText(), containsString("Apple")))

Вот,

  • findElement () находит элемент и возвращает атом

  • webMatches похож на метод совпадений

findElement () находит элемент и возвращает атом

webMatches похож на метод совпадений

Написать образец заявки

Давайте напишем простое приложение на основе WebView и напишем тестовый пример с помощью метода onWebView () . Выполните следующие шаги, чтобы написать пример приложения —

  • Запустите Android-студию.

  • Создайте новый проект, как обсуждалось ранее, и назовите его MyWebViewApp .

  • Перенесите приложение на платформу AndroidX, используя меню параметров RefactorMigrate to AndroidX .

  • Добавьте приведенный ниже параметр конфигурации в файл AndroidManifest.xml, чтобы дать разрешение на доступ к Интернету.

Запустите Android-студию.

Создайте новый проект, как обсуждалось ранее, и назовите его MyWebViewApp .

Перенесите приложение на платформу AndroidX, используя меню параметров RefactorMigrate to AndroidX .

Добавьте приведенный ниже параметр конфигурации в файл AndroidManifest.xml, чтобы дать разрешение на доступ к Интернету.

<uses-permission android:name = "android.permission.INTERNET" />
  • Espresso web предоставляется в виде отдельного плагина. Итак, добавьте зависимость в app / build.gradle и синхронизируйте ее.

Espresso web предоставляется в виде отдельного плагина. Итак, добавьте зависимость в app / build.gradle и синхронизируйте ее.

dependencies {
   androidTestImplementation 'androidx.test:rules:1.1.1'
   androidTestImplementation 'androidx.test.espresso:espresso-web:3.1.1'
}
  • Удалите дизайн по умолчанию в основной деятельности и добавьте WebView. Содержимое Activity_main.xml выглядит следующим образом:

Удалите дизайн по умолчанию в основной деятельности и добавьте WebView. Содержимое Activity_main.xml выглядит следующим образом:

<?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
   xmlns:app = "http://schemas.android.com/apk/res-auto"
   xmlns:tools = "http://schemas.android.com/tools"
   android:layout_width = "match_parent"
   android:layout_height = "match_parent"
   tools:context = ".MainActivity">
   <WebView
      android:id = "@+id/web_view_test"
      android:layout_width = "fill_parent"
      android:layout_height = "fill_parent" />
</RelativeLayout>
  • Создайте новый класс ExtendedWebViewClient, расширяющий WebViewClient, и переопределите метод shouldOverrideUrlLoading для загрузки действия ссылки в том же WebView ; в противном случае откроется новое окно браузера вне приложения. Поместите его в MainActivity.java .

Создайте новый класс ExtendedWebViewClient, расширяющий WebViewClient, и переопределите метод shouldOverrideUrlLoading для загрузки действия ссылки в том же WebView ; в противном случае откроется новое окно браузера вне приложения. Поместите его в MainActivity.java .

private class ExtendedWebViewClient extends WebViewClient {
   @Override
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
      view.loadUrl(url);
      return true;
   }
}
  • Теперь добавьте приведенный ниже код в метод onCreate MainActivity . Цель кода — найти WebView , правильно его настроить и затем, наконец, загрузить целевой URL.

Теперь добавьте приведенный ниже код в метод onCreate MainActivity . Цель кода — найти WebView , правильно его настроить и затем, наконец, загрузить целевой URL.

// Find web view
WebView webView = (WebView) findViewById(R.id.web_view_test);

// set web view client
webView.setWebViewClient(new ExtendedWebViewClient());

// Clear cache
webView.clearCache(true);

// load Url
webView.loadUrl("http://<your domain or IP>/index.html");

Вот,

  • Содержание файла index.html выглядит следующим образом:

Содержание файла index.html выглядит следующим образом:

<html>
   <head>
      <title>Android Web View Sample</title>
   </head>
   <body>
      <h1>Fruits</h1>
      <ol>
         <li><a href = "apple.html" id = "apple">Apple</a></li>
         <li><a href = "banana.html" id = "banana">Banana</a></li>
         </ol>
   </body>
</html>
  • Содержимое файла apple.html, указанного в index.html, выглядит следующим образом:

Содержимое файла apple.html, указанного в index.html, выглядит следующим образом:

<html>
   <head>
      <title>Android Web View Sample</title>
   </head>
   
   <body>
      <h1>Apple</h1>
   </body>
</html>
  • Содержимое файла banana.html, указанного в banana.html, выглядит следующим образом:

Содержимое файла banana.html, указанного в banana.html, выглядит следующим образом:

<html>
   <head>
      <title>Android Web View Sample</title>
   </head>
   
   <body>
      <h1>Banana</h1>
   </body>
</html>
  • Поместите index.html, apple.html и banana.html на веб-сервер

  • Замените URL-адрес в методе loadUrl вашим настроенным URL-адресом.

  • Теперь запустите приложение и вручную проверьте, все ли в порядке. Ниже приведен скриншот примера приложения WebView.

Поместите index.html, apple.html и banana.html на веб-сервер

Замените URL-адрес в методе loadUrl вашим настроенным URL-адресом.

Теперь запустите приложение и вручную проверьте, все ли в порядке. Ниже приведен скриншот примера приложения WebView.

Пример WebView

  • Теперь откройте файл ExampleInstrumentedTest.java и добавьте следующее правило:

Теперь откройте файл ExampleInstrumentedTest.java и добавьте следующее правило:

@Rule
public ActivityTestRule<MainActivity> mActivityRule =
   new ActivityTestRule<MainActivity>(MainActivity.class, false, true) {
   @Override
   protected void afterActivityLaunched() {
      onWebView(withId(R.id.web_view_test)).forceJavascriptEnabled();
   }
};

Здесь мы нашли WebView и включили JavaScript WebView, потому что среда веб-тестирования эспрессо работает исключительно через движок JavaScript для идентификации и управления веб-элементом.

  • Теперь добавьте контрольный пример, чтобы проверить наш WebView и его поведение.

Теперь добавьте контрольный пример, чтобы проверить наш WebView и его поведение.

@Test
public void webViewTest(){
   onWebView()
      .withElement(findElement(Locator.ID, "apple"))
      .check(webMatches(getText(), containsString("Apple")))
      .perform(webClick())
      .withElement(findElement(Locator.TAG_NAME, "h1"))
      .check(webMatches(getText(), containsString("Apple")));
}

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

нашел ссылку, яблоко, используя его атрибут id через метод findElement () и перечисление Locator.ID .

проверяет текст ссылки с помощью метода webMatches ()

выполняет действие клика по ссылке. Откроется страница apple.html .

снова нашел элемент h1, используя методы findElement () и перечисление Locator.TAG_NAME .

Наконец, снова проверяется текст тега h1 с помощью метода webMatches () .

Наконец, запустите тестовый пример, используя контекстное меню Android Studio.