Espresso-testing-webview
エスプレッソテストフレームワーク-WebView
_WebView_は、アプリケーション内にWebページを表示するためにAndroidが提供する特別なビューです。 _WebView_は、chromeやfirefoxなどの本格的なブラウザアプリケーションのすべての機能を提供するわけではありません。 ただし、表示されるコンテンツを完全に制御し、Webページ内で呼び出されるすべてのAndroid機能を公開します。 _WebView_を有効にし、HTMLテクノロジーとカメラや連絡先のダイヤルなどのネイティブ機能を使用してUIを簡単に設計できる特別な環境を提供します。 この機能セットにより、_WebView_は_Hybrid application_と呼ばれる新しい種類のアプリケーションを提供できます。UIはHTMLで実行され、ビジネスロジックは_JavaScript_または外部APIエンドポイントを介して実行されます。
通常、_WebView_のテストは、ネイティブユーザーインターフェース/ビューではなくユーザーインターフェース要素にHTMLテクノロジーを使用するため、挑戦する必要があります。 Espressoは、WebマッチャーとWebアサーションに新しいセットを提供することで、この分野で優れています。これは、ネイティブビューマッチャーとビューアサーションに意図的に似ています。 同時に、Webテクノロジーベースのテスト環境も含めることにより、バランスの取れたアプローチを提供します。
Espresso Webは、Web要素の検索と操作に使用される_WebDriver_ Atomフレームワークに基づいて構築されています。 Atom_はビューアクションに似ています。 AtomはWebページ内ですべての対話を行います。 _WebDriver_は、_findElement()、_ getElement()_などの事前定義されたメソッドのセットを公開して、Web要素を検索し、対応するアトムを返します(Webページでアクションを実行します)。
標準のウェブテストステートメントは次のコードのようになります。
ここに、
- onWebView()-onView()と同様に、WebViewをテストするためのAPIセットを公開します。
- withElement()-Atomを使用してWebページ内のWeb要素を特定し、ViewInteractionに似たWebInterationオブジェクトを返すために使用されるいくつかのメソッドの1つ。
- perform()-Atomを使用してWebページ内でアクションを実行し、WebInteractionを返します。
- check()-これはWebAssertionを使用して必要なアサーションを行います。
サンプルのWebテストコードは次のとおりです。
ここに、
- _findElement()_要素を特定し、Atomを返します
- _webMatches_はmatchesメソッドに似ています
サンプルアプリケーションを作成する
WebViewに基づいた簡単なアプリケーションを作成し、_onWebView()_メソッドを使用してテストケースを作成しましょう。 次の手順に従って、サンプルアプリケーションを作成します-
- Androidスタジオを起動します。
- 前述のように新しいプロジェクトを作成し、_MyWebViewApp_という名前を付けます。
- Refactor→Migrate to _AndroidX_オプションメニューを使用して、アプリケーションをAndroidXフレームワークに移行します。
- _AndroidManifest.xml_ファイルに以下の構成オプションを追加して、インターネットへのアクセス許可を付与します。
- Espresso Webは、個別のプラグインとして提供されます。 そのため、app/build.gradleに依存関係を追加して同期します。
- メインアクティビティのデフォルトデザインを削除し、WebViewを追加します。 activity_main.xmlの内容は次のとおりです。
- _WebViewClient_を拡張する新しいクラス_ExtendedWebViewClient_を作成し、_shouldOverrideUrlLoading_メソッドをオーバーライドして、同じ_WebView_にリンクアクションをロードします。そうでない場合は、アプリケーションの外部で新しいブラウザウィンドウが開きます。 _MainActivity.java_に配置します。
- 次に、_MainActivity_のonCreateメソッドに以下のコードを追加します。 コードの目的は、_WebView_を見つけて適切に構成し、最後にターゲットURLをロードすることです。
ここに、
- _indexl_の内容は次のとおりです-
- _indexl_で参照される_applel_ファイルの内容は次のとおりです-
- _bananal_で参照される_bananal_ファイルの内容は次のとおりです。
- indexl、applel、およびbananalをWebサーバーに配置する
- loadUrlメソッドのURLを構成済みのURLに置き換えます。
- 次に、アプリケーションを実行し、すべてが正常かどうかを手動で確認します。 以下は、_WebViewサンプルアプリケーションのスクリーンショットです-
- 今、_ExampleInstrumentedTest.java_ファイルを開き、以下のルールを追加します-
ここでは、_WebView_を見つけ、_WebView_のJavaScriptを有効にしました。これは、エスプレッソWebテストフレームワークがJavaScriptエンジンを介して排他的に動作し、Web要素を識別および操作するためです。
- 次に、テストケースを追加して、_WebView_とその動作をテストします。
ここでは、テストは次の順序で行われました。
- _findElement()_メソッドと_Locator.ID_列挙を介してid属性を使用して、リンクを見つけました。
- _webMatches()_メソッドを使用してリンクのテキストをチェックします
- リンクに対してクリックアクションを実行します。 _applel_ページを開きます。
- findElement()メソッドと_Locator.TAG_NAME_列挙を使用して、再びh1要素を見つけました。
- 最後に、_webMatches()_メソッドを使用して_h1_タグのテキストを再度チェックします。
- 最後に、Android Studioのコンテキストメニューを使用してテストケースを実行します。