ホームページ > ウェブフロントエンド > jsチュートリアル > Selenium で動的 XPath を作成して処理する方法 [戦術付き]

Selenium で動的 XPath を作成して処理する方法 [戦術付き]

DDD
リリース: 2024-11-18 06:35:03
オリジナル
314 人が閲覧しました

How to Write and Handle Dynamic XPath In Selenium [with Tactics]

自動テストでは、テスト対象アプリケーション (AUT) の Web 要素を認識できることが重要です。 Web 要素の検索方法を学習し、Selenium で動的 XPath を手動で記述するには、長い時間と多くの練習が必要になる場合があります。

たとえば、XPath を使用して Selenium で Web 要素を手動かつ簡単に検索する方法を示します。

ロケーターは Selenium の貴重な機能の 1 つです。これらにより、Web 要素を見つけることができます。たとえば、ID、クラス名、名前、リンク テキストなどのロケーターで Web 要素が見つからない場合は、XPath を使用して Web ページ上で要素を検索します。

Selenium の動的 XPath とは何ですか?

XPath は XML パスとも呼ばれ、ページの HTML 構造内を移動するために Selenium WebDriver で最もよく使用されるロケーターの 1 つです。これを使用すると、HTML および XML ドキュメントの HTML DOM 構造を使用して、Web ページ内の任意の要素を見つけることができます。

XPath は、XML ドキュメントのナビゲーションで特定の処理のために XML ドキュメントの個々の要素、属性、またはその他の部分を選択できるようにすることを目的としています。たとえば、XPath は信頼性の高いロケーターを生成しますが、パフォーマンスの点では CSS Selector よりも遅くなります。

言語 XPath は、HTML ページ内の要素を選択するために使用されます。 XPath を使用すると、タグ名、ID、CSS クラスなどに基づいてページ上の要素を検索できます。 Selenium には 2 種類の XPath があります。

Selenium で動的 XPath を使用して要素を検索するさまざまなアプローチ:

01 絶対 XPath

これは要素を見つける最も直接的な方法ですが、「絶対 XPath」の欠点は、要素のパスが変更されると、その特定の XPath が失敗することです。

XPath の重要な特徴は、単一のスラッシュ (/) で始まることです。これは、動的 XPath を使用してルート ノードから要素を選択できることを示します。

02 相対 XPath

相対 XPath は、パスがルート ノードではなく選択したノードから始まるものです。

相対 XPath を使用する利点は、XPath 全体を指定する必要がないことです。代わりに、真ん中またはその中間から始めることができます。

*欠点: *

正確なパスではなく部分的なパスを指定するため、要素の識別には時間がかかります。

複数の要素が同じパス上にある場合は、最初に識別された要素が選択されます。

Selenium で動的要素の XPath を見つける方法は?

コンテキスト (現在の) ノードから、XPath 軸は XML ドキュメント内のさまざまなノードを検索します。たとえば、そのツリーに最も近いノードを見つけるために使用されます。

XPath 軸は、ID、クラス名、名前、またはその他の識別子を含まない標準の XPath メソッドを使用して検索することが不可能な動的要素を検索するためのメソッドです。

Axes メソッドは、更新やその他の操作によって動的に変化する要素を見つけるために使用されます。たとえば、子、親、祖先、兄弟、先行、自己、およびその他の軸メソッドは、Selenium Webdriver で一般的に使用されます。

彼らは、テスト自動化において、特にソフトウェア開発の初期段階において、AUT の変更が最も複雑で時間のかかるタスクの 1 つであるときに、テスト スクリプトを変更していました。

その結果、開発者は、あるビルドから別のビルドに識別子や要素を頻繁に変更する可能性があります。さらに、AUT の要素は実行中に動的に変更される可能性があります。

これらの問題に対処するには、自動化テスターはテスト ケース要素に固定 XPath を設定せず、代わりに特定のパターンに基づいて XPath を動的にスクリプト化する必要があります。

Selenium で動的 XPath を作成する 11 のユニークな方法:

Selenium で動的 XPath を作成する 11 のユニークで異なる方法を次に示します。

real-device-cloud-cta.jpg

01 シングルスラッシュの使用

このメカニズムは、絶対 XPath 要素検出とも呼ばれます。

構文:

html/body/div[1]/div[2]/div[2]/div[1]/form/div[1]/div/div[1]/div/div/input[1]
単一のスラッシュは、絶対パスを含む XPath を作成するために使用されます。つまり、XPath は、ドキュメント ノード/開始ノード/親ノードから選択を開始するように設計されています。

02 ダブルスラッシュの使用

このメカニズムは、相対 XPath による要素の検索とも呼ばれます。

二重スラッシュは、相対パスを使用して XPath を作成するために使用されます。これは、XPath がドキュメント内のどこからでも選択を開始できることを意味します。次に、ページ全体 (DOM) で前述の文字列を探します。

構文

//form/div[1]/div/div[1]/div/div/input[1]

03 単一属性の活用

以下に示すように、構文は 2 つの方法で記述できます。 HTML タグの包含または除外。 HTML タグを除外したい場合は、*.

を使用する必要があります。

構文

//[@attribute_name='attribute_value']
または
//*[@attribute_name='attribute_value']

04 複数の属性の使用

構文

//[@attribute_name1='attribute_value1'][@attribute_name2='attribute_value2]
または
//*[@attribute_name1='attribute_value1'][@attribute_name2='attribute_value2]

05 AND の使用

構文

//[@attribute_name1='attribute_value1' および @attribute_name2='attribute_value2]
または
//*[@attribute_name1='attribute_value1' および @attribute_name2='attribute_value2]

06 OR の使用

構文

//[@attribute_name1='attribute_value1' または @attribute_name2='attribute_value2]
または
//*[@attribute_name1='attribute_value1' または @attribute_name2='attribute_value2]

07 contains() の使用

Contains() は、要素の属性値の一部を知っている場合に、動的に変化する要素を識別するためのメソッドです。

要素の属性の値 (指定されたテキストから始まる) がわかっている場合は、starts-with() メソッドを使用してそれを識別できます。

構文

//[contains(@attribute_name,'attribute_value')]
または
//*[contains(@attribute_name,'attribute_value')]

#08 テキストの使用 ()

このメカニズムは、Web ページのテキストに基づいて要素を検索するために使用されます。

Last() は、すべての入力要素から (指定されたタイプの) 最後の要素を選択します。

構文

//[text()='サインインの新しい外観が近日公開予定']
または
//
[text()='サインインの新しい外観が近日公開予定']

09 Position() の使用、

要素は、指定された位置番号に基づいてすべての入力要素の中から選択されます。

次の XPath では、[@type=’text’] はテキスト フィールドを特定し、関数 [position()=2] は上から 2 番目の位置にあるテキスト フィールドを特定します。

構文

findElement(By.xpath("(//input[@type='text'])[position()=2]"))
または
findElement(By.xpath("(//input[@type='text'])[2]"))

10 インデックスの使用

インデックス位置を角かっこで囲むことで、n 番目の要素に到達できます。次に、以下の XPath を使用して Last Name フィールドを特定することができました。

構文

findElement(By.xpath("//label[2]"))

11 以前の XPath 軸の使用

祖先、属性ノード、および名前空間ノードを除き、ドキュメント内の現在のノードの前に表示されるすべてのノードが選択されます。

Selenium のリストから Web 要素を選択するにはどうすればよいですか?

WebElement select = driver.findElement(By.id(“gender”));
リストオプション = select.findElements(By.tagName(“男性”));
for (WebElement オプション : オプション) {
if(“ドイツ”.equals(option.getText()))
option.click();

Selenium はリストボックスをどのように処理しますか?

selectByValue() を使用する

リストボックスを選択 = new Select(driver.
リストボックス。
リストボックスを選択 = new Select(driver.
WebElement オプション = listbox.getFirstSelectedOption();
System.out.println(option.getText()); //選択されたオプションを印刷します。
//選択されたすべてのオプションをリストします。
//すべてのオプションをリストします。

Selenium で動的 Web 要素を記述する方法?

動的要素は、ID だけでなく、クラス名、値などの属性も固定されていない Web 要素です。

したがって、ページをリロードするたびに変更されます。その結果、ロケーターだけを介してその要素を処理することはできません。

たとえば、Gmail 受信トレイ要素のクラス名はログインごとに変わります。

データベース駆動型またはセッション駆動型の動的要素 データベース要素を変更すると、テスト中のいくつかのアプリケーション領域に影響します。

動的要素は厳密にコンテンツであり、デザイン内にフォーマットがレイアウトされています。テキスト ボックスとボタンは通常、動的識別子とともに使用されます。

動的 Web サイトを自動化すると、コンテンツが変更されるとすぐにスクリプトが中断され、テストが失敗します。その後、毎回テスト ケースを更新する必要がありますが、これは時間のかかる作業です。

ページがリロードされるとき、または新しいセッションが開始されるときに、これらの要素がどのように動作するかを常に理解する必要があります。これらの要素を理解したら、これらの要素と対話するための戦略を準備できます。

#01 開始テキストを含む相対 Xpath

Selenium の部分リンク セレクターと同様に、開始テキスト一致要素で Xpath 検索を使用できます。

#02 後続または先行ノードを持つ相対 Xpath

コンテキスト ノードに続くすべてのノードを以下にリストします。 「the Following」を使用して、Web 要素リストで以下にリストされている要素を指定できます。

#03 テキストに相対 Xpath が含まれています

静的な値を含む動的要素はほとんどありません。それらの価値観に基づいて。 「contains」関数を使用してそのような要素を検索できます。たとえば、上記の HTML ボタン クラス名には静的文字列「Hstpl-12345」があります。たとえば、XPath を使用して、「Hstpl」という単語を含むクラス名を持つボタン要素を検索できます。

#04 インデックス付き要素

DOM 内に同様の属性を持つ複数の要素がある場合、特にそれらが動的である場合、それらの要素を検索するのが困難になることがあります。

たとえば、ページ上に 10 個のボタンがあり、5 番目のボタンを見つけたいとします。次に、「ボタン」タグを持つ要素を探し、ボタンのリストの 5 番目のインデックスに移動してその要素を見つけます。

#05 絶対Xpathの方法

絶対 Xpath は、ルート要素から特定の要素までのパス全体を使用します。以下に示すように、絶対 Xpath は HTML とスラッシュ (/) で始まります。 Xpath を生成するには、fire path (firebug) を使用します。

ただし、DOM の小さな変更によって不正確になったり、別の要素を参照したりするため、回帰が起こりやすくなります。

したがって、ほとんどの場合、絶対 Xpath の使用はベスト プラクティスとみなされませんが、動的要素の問題は解決されます。

#06 IWebElement インターフェースが使用されています。

動的要素を処理するもう 1 つの方法は、同じタグ名を持つすべての要素を検索し、テキスト、値、または要素属性が含まれているかどうかに基づいて必要な要素を検索することです。

結論

この記事では、XPath 関数 contains()、starts-with()、および text() を属性とテキストとともに使用して、HTML DOM 構造内の要素を一意に識別する方法を説明しました。

Selenium では、他のロケーターが失敗した場合に要素を見つけるために XPath が使用されます。 Selenium XPath には、絶対 XPath と相対 XPath の 2 種類があります。

出典: この記事はもともと testgrid.io で公開されました。

以上がSelenium で動的 XPath を作成して処理する方法 [戦術付き]の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート