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, используя меню параметров Refactor → Migrate to AndroidX .
-
Добавьте приведенный ниже параметр конфигурации в файл AndroidManifest.xml, чтобы дать разрешение на доступ к Интернету.
Запустите Android-студию.
Создайте новый проект, как обсуждалось ранее, и назовите его MyWebViewApp .
Перенесите приложение на платформу AndroidX, используя меню параметров Refactor → Migrate 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.
-
Теперь откройте файл 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.