このセクションでは、値を抽出して検証したり、他のシナリオ ステップやツールで使用するために格納する方法について説明します。
このセクションの内容:
ブラウザーから記録された各シナリオ ステップに自動的に追加された Browser Contents Viewer ツールで、レンダリングされたビューの中のページ要素をクリックし、自動的にこれらの要素に機能テストを設定できます。後続の再生で検証が満たされない場合、関連するシナリオ ステップは失敗します。
さらに、これらの要素からデータを "抽出" して格納できます。そして抽出した値を追加のツール (フォーム フィールドのデータ投入やデータの検証のためのインスタンスのためのツール) で使用できます。 このため、動的データの検証が重要なシナリオを簡単に設定できます。抽出したデータは Web テストとサービス/API テストの両方で使用できます。
また、パスをレコーディングしている最中に、Web ブラウザーでパス要素を抽出することもできます。それには、ブラウザーで要素を右クリックし、ショートカット メニューの [Configure Validations] を選択します。[Validation Options] ダイアログが表示されます。このダイアログに表示されるオプションは、Browser Contents Viewer ツールのオプションと同じです。このツールは、パスを記録し、少なくとも 1 回再生した 後に 表示されます。 |
レンダリングされたページで表現される値の検証や格納をするには、Browser Contents Viewer のツール コンフィギュレーション パネル (ツールのノードをダブルクリックして開く) または [アクション後のブラウザー コンテンツ] タブ (抽出のみ) で次の設定を行います。
シナリオを実行したときに、値が検証されて格納されます。
Browser Contents Viewer ツールが、抽出や検証をしたい値を表示しない場合 (関連するシナリオ ステップが失敗した場合や、レンダリングされたページで対象アイテムが不可視の場合 (title など)、手動で Browser Validation ツールや Browser Data Bank ツールを追加できます。詳細については、「テストの出力を追加」を参照してください。 |
検証で動的属性値を扱う 1 つの方法は、XPath 文字列を部分的に使用することです。XPath を使用するには、Browser Validation ツールの [要素の指定] セクションで [XPath の使用] を選択し、適切な XPath を指定します。XPath の使用に関する詳細は、「XPath のリファレンス」を参照してください。XPath の文字列の一部の使用方法についての詳細は、「動的属性値の操作: Handing Dynamic Attribute Values - Partial String Matching Using XPathXPath を使用した部分文字列の一致」を参照してください。 |
input.getHTML() を使用すると、ブラウザー ウィンドウやフレームに HTML を表示できます。 com.parasoft.api.BrowserContentsInput については Javadoc を参照してください。Javadoc は [Parasoft] メニューの [ヘルプ] > [Extensibility API] から参照できます。 たとえば、以下は RFC のタイトルを検索する JavaScript です。
|
Browser Validation Tool がテストに連結されます。このツールは検証を行います。後で検証を修正したい場合は、このツールの設定を変更することで修正可能です。
検証のソースとなる要素は、Browser Contents Viewer と Browser Validation Tool の [アクション後のブラウザー コンテンツ] タブで、赤い太線でハイライトされます。
Browser Data Bank は Browser Playback Tool に連結されます。このツールは、抽出された値を格納します。抽出された値は、パラメータライズされた値として、後続のシナリオ ステップや他のツールでの入力値に使用できます。格納された値を後から修正する場合は、このツールの設定を変更することによって修正可能です。
抽出のソースとなる要素は、 Browser Contents Viewer と Browser Data Bank の [アクション後のブラウザー コンテンツ] タブで灰色の太線でハイライトされます。
上に記載のとおり、Browser Validation Tool と Browser Data Bank はテストに連結されます。さらに、ソースとなる要素は紫色の破線でハイライトされます。
ページ上に出現したテキストを検証するには (または Browser Data Bank にテキストを抽出するには)、 次の操作を行います。
ページ上の色を検査するテストを作成するには、次の操作を行います。
色の検査は、テスト実行時に行われます。
SOAtest には Validation Colors Mapping というファイルが同梱されています。 このファイルは、 SOAtest が色を名前で検査する方法を定義します。 次の場所に格納されています: <SOAtest_Installation_Directory>/plugins/com.parasoft.xtest.libs.web_<soatest_version>/root/validation/validationColors.txt.
ファイルの各行は、RGB カラーモデルの各構成要素の範囲とともに、名前で色を定義しています。 範囲を指定することで、検査される色が RGB カラー モデルの各構成要素の範囲内に含まれる場合、その色はこれらの範囲で定義された色に一致するということを判断します。 たとえば、下記はこのファイルの中の一行です。
red, b0-ff, 00-30, 00-30
この行は、 "red" の有効範囲を定義しています。 範囲は 16 進数で指定されています。 赤色の有効な R の範囲は 16進数の b0 と ff の間であることを表しています。 赤色の有効な G と B の範囲は 16進数の 00 と 30 の間です。 言い換えると、16 進数で #c80000 という値を要素が持っていた場合、その要素は赤であると見なされます。なぜなら、R の値、c8 は b0 と ff の間に含まれており、G と B の値、00 は 00 と 30 の間に含まれているからです。 しかしながら、赤であると期待される要素を検査したところ、その要素の色が 16 進数の #909090 であった場合、SOAtest は要素が間違った色を持っているというメッセージを表示します。
マッピング ファイルには、すでにいくつかの標準カラーが定義されています。 しかし、ファイルを修正して追加の色を指定することができます。 定義できる色は、1 行につき 1 色までです。 また、マッピング ファイルを修正して、定義済みの色の RGB 範囲を変更できます。 範囲は、「b0-ff」のようにハイフンで指定するか、「ff」のように単一の値を指定します 。 単一の値を指定する場合は、有効な値の範囲はその値だけとなります。 先にも述べたとおり、範囲は 16 進数で定義します。
このファイルへの変更を有効にするには、SOAtest を再起動してください。
スタイル プロパティを検査するには、Browser Validation Tool のコンフィギュレーション パネルを開き、[要素のプロパティ] フィールドに "style_" + <the JavaScript name of the property> を設定します。たとえば、 text-decoration スタイル プロパティを検査する場合、[要素のプロパティ] フィールドに style_textDecoration を指定します (textDecoration は JavaScript で text-decoration を指定する場合の記述です)。そして [期待値] 項目で適切なプロパティ値を指定します。 text-decoration の場合は、期待値は line-through または underline などと等しくなるかもしれません。
検査ウィザードで特定のスタイル プロパティを利用可能なプロパティとして表示したい場合、Validation Styles List にそのスタイルを追加できます。
Validation Styles List ファイルは、次の場所に格納されています。検証できる ランタイム スタイル プロパティ を指定します。
<SOAtest_Installation_Directory>/plugins/com.parasoft.xtest.libs.web_<soatest_version>/root/validation/validationStylesList.txt
このファイルのフォーマットは、1 行につき 1 プロパティです。 デフォルトで color プロパティがファイルに指定されていますが、検査したい有効なスタイル プロパティを追加できます。 このファイルへの変更を有効にするには、SOAtest を再起動する必要があります。再起動すると、記録中の Firefox ブラウザーか記録後のレンダリングされたビューで要素を右クリックしたときに、検査ダイアログでこのファイルで指定したプロパティを確認できます。 各プロパティに“style_” が付加されたものは、個別のスタイル プロパティのランタイム値を参照することを表します。
これらのプロパティを使用して設定した検査は、そのスタイル プロパティのランタイム値を検査します。 ランタイム値とは、すべてのインライン スタイルと CSS ファイルで定義されたスタイルが適用されたプロパティ値です。 このため、要素のインラインで定義されている値とは異なる値かもしれません。 たとえば、ランタイム スタイル検査は、ブラウザーですべてのスタイルが適用された後でユーザーが目にする実際の色を検査できます。
各検証で、SOAtest は検証が失敗した場合に [品質タスク] ビュー (およびレポート) で表示されるメッセージを自動的に構成します。 このメッセージは、一般的には次のようなものです: "Validation failed for property [property_name]: Actual value found on the page [actual value]" must be equal to expected value [expected value]."
アプリケーションにとってより意味のあるカスタム メッセージに簡単に設定できます。たとえば、オンライン バンキング アプリケーションで作業していて、口座残高がゼロに達していないことをチェックする検証を追加するとします。この場合、"//span[text() = "account" was not found" といったデフォルトのビルトイン メッセージの代わりに、"Account should not be zero" といったカスタム メッセージを指定できます。
カスタム検証メッセージを設定するには、次の操作を行います。
[コンソール] ビュー ([ウィンドウ] > [ビューの表示] > [コンソール]) を構成して、テスト実行時に使用された格納されたデータ バンク変数を表示できます。詳細については、「[コンソール] ビュー」を参照してください。
XPath を使用して複雑な検証を指定できます。XPath を使用するには、Browser Validation Tool の [要素の指定] フィールドを [XPath の使用] に設定し、適切な XPath を指定します。XPath の使用に関する詳細については、「XPath のリファレンス」を参照してください。
GUI の制御画面では適切に表現できない複雑な検証を行う場合は、スクリプトを使用して表現できます。Browser Validation Tool の [要素の指定] フィールドで [スクリプトの使用] を選択し、適切なスクリプトを指定します。
たとえば、テーブルのすべての行を検証すると仮定します。対象のテーブルは可変長である可能性があります。ブラウザー機能テストに Extension Tool を接続し、input.getDocument() によって提供される文書から値を引っ張ることができます。以下は、この動作を達成する JavaScript スクリプトのサンプルです。
var Application = Packages.com.parasoft.api.Application; var WebBrowserTableUtil = Packages.webking.api.browser2.WebBrowserTableUtil; var WebKingUtil = Packages.webking.api.WebKingUtil; // Verify that all values in a table column are equal to a previously // extracted value. For example, we searched for all places in which // widget 11 is sold, and we want to make sure that all results are // for widget 11. // input: com.parasoft.api.BrowserContentsInput. // context: com.parasoft.api.ExtensionToolContext. function validateTable(input, context) { // For the column we want to validate. var widgetColumnIndex = 0; // We extracted through a Browser Data Bank in a previous test // the expected value to data bank column "widgetName". // The value was extracted, not from a data source, so use "" or // null (None in Python) as the name of the data source. var expectedWidgetName = context.getValue("", "widgetName"); var document = input.getDocument(); // Table should have some unique identifying attribute (e.g., id). var table = WebBrowserTableUtil.getTable("id", "mytable", document); // If the first row of the table contained column headers, we could // use getCellValuesForColumn(String, Element). For example if the // widget name column was named "Widget Name", then we could use // getCellValuesForColumn("Widget Name", table). In either case, // getCellValuesForColumn returns an array of String objects. See // the JavaDocs for more information. var values = WebBrowserTableUtil.getCellValuesForColumn(widgetColumnIndex, table); if (values.length == 0) { context.report("No rows found!"); } for (var i = 0; i < values.length; ++i) { if (values[i] != expectedWidgetName) { var errorMessage = "Widget name (column " + widgetColumnIndex + "): " + "Expected value '" + expectedValue + "', but found '" + values[i] + "'."; context.report(errorMessage); } } |