handling web tables frames
前回のSeleniumWebDriverチュートリアルでは、さまざまな一般的な学習と 日常的に使用されるSeleniumWebDriverコマンド Seleniumスクリプトでのiframeや例外の処理などの重要なトピックを含みます。
私たちの包括的な前進 Seleniumに関する一連のチュートリアル 、このチュートリアルでは、 Webテーブル、iframe、動的要素の処理 これは、Webプロジェクトの重要な部分です。
このチュートリアルは、3つの異なるトピックと、セレンスクリプトでのそれらの処理メカニズムで構成されています。
- Webテーブル/ HTMLテーブル
- フレーム
- 動的要素
学習内容:
#1)Webテーブル/ HTMLテーブル
このモジュールでは、Webページ内のWebテーブルまたはHTMLテーブル、HTMLで使用可能なタグ、およびWebテーブルを動的に処理する方法について学習します。
Webテーブルは基本的に、行と列の形式で論理的に格納される要素のグループです。これは、Webページ上の同様の情報を整理するために使用されます。
以下は、Htmlテーブルの例です。
以下は、HTMLテーブルのHTML構造のスニペットです。
以下のタグは通常、htmlテーブルで定義されています。
1.「table」タグはHTMLテーブルを定義します。
2.「tbody」タグは行と列のコンテナを定義します。
3.「tr」はHTMLテーブルの行を定義します。
4.「td」/「th」はHTMLテーブルの列を定義します。
Webテーブルの詳細を検索します。
Webテーブルを処理する方法はたくさんあります。
ソフトウェア開発ライフサイクル設計フェーズ
アプローチ#1 :
以下は、htmlテーブルのセルの1つのxpathです。 「名」としましょう
// div (@ id = ’main’) / table (1) / tbody / tr (1) / th (1)
tr (1)は最初の行を定義し、th (1)は最初の列を定義します。
行と列の数が常に一定である場合、HTMLテーブルには常に5行と3列があるとします。
for(int numberOfRows=1; numberOfRows<=5; numberOfRows++) { for(int numberOfCol=1; numberOfCol <=3; numberOfCol++) { System.out.println(driver.findElement(By.xpath (“//div(@id='main')/table(1)/tbody/tr (“+numberOfRows+”)/th(“+numberOfCol+”)”))); } }
行番号と列番号を除いて、XPathの各コンポーネントは同じままです。したがって、上記のように、各行と列に「forループ」を使用して繰り返すことができます。
アプローチ#2 :
最初のアプローチは、寸法を変更せず、常に同じままであるテーブルに最適です。上記のアプローチは、Webテーブルを動的に変更するための完全なソリューションではありません。
上記のHTMLテーブルを例として取り上げましょう。
WebElement htmltable=driver.findElement(By.xpath('//*(@id='main')/table(1)/tbody')); List rows=htmltable.findElements(By.tagName('tr')); for(int rnum=0;rnum ステップ1 :最初にHTMLテーブル全体を取得し、これをタイプweb要素の変数「htmltable」に格納します。
ステップ2 :タグ名「tr」のすべての行を取得し、すべての要素をWeb要素のリストに保存します。これで、タグ「tr」の付いたすべての要素が「行」リストに保存されます。
ステップ3 :各行をループして、タグ付きの要素のリストを取得します 「th」。 ‘rows.get(0)’ 最初の行を与え、 ‘findElements(By.tagName( 「th」 )) ' 行の列のリストが表示されます。
ステップ4 :使用を繰り返す ‘columns.getsize()’ 各セルの詳細を取得します。
注意 :テーブルの寸法が動的に変化する場合は、上記のアプローチが最適です。
これで、セレンでWebテーブルを処理する方法のトピックは終わりです。次に、フレーム内の要素の処理について学習します。
#2)フレーム
このセクションでは、Webページのフレームとフレームの識別方法について学習します。また、SeleniumWebDriverでフレームを処理する方法についても説明します。
多くの開発者は、フレーム内に要素を配置することを好みます。フレームは、いくつかの要素をグループ化できるコンテナのようなものです。
フレームの識別:
要素がフレーム内に存在するかどうかを知るためのさまざまな方法
#1 。要素を右クリックします。 「このフレーム」オプションが使用可能かどうかを確認します。このフレームオプションが使用可能な場合は、要素がフレーム内にあることを意味します。
#二 。ウェブページのページソースを表示し、「iframe」で使用できるタグがあるかどうかを確認します。
オンラインでさまざまなブラウザでウェブサイトをテストする

Webページのフレーム数を確認する :
すべてのフレームのタグ名は「iframe」です。
リストframeList = driver.findElements(By.tagName( 「iframe」 ));
System.out.println(frameList.size());
上記の例では : frameList フレームのすべてのリストがあり、 frameList.size() フレーム数を示します。
フレーム内の要素の処理:
要素がフレーム内にある場合、コントロールは最初にフレームに切り替えてから、要素の操作を開始する必要があります。
ステップ1 :フレーム内で切り替えるには:
driver.switchTo()。frame(1); //フレーム番号をパラメータとして渡します。
または
driver.switchTo()。frame( 'フレーム名'); //フレーム名をパラメータとして渡します。
または
driver.switchTo()。frame( 'フレームのxpath');
ステップ2 :フレーム内で切り替えた後、セレンは要素を操作できるようになります。
driver.findElement( // **************************************);
driver.findElement( // **************************************);
ここでは、フレーム内の要素を処理する方法を学習しました。次に、動的要素を処理するさまざまな方法について説明します。
#3)動的要素
このセクションでは、動的要素を処理し、汎用Xpathを構築するさまざまな方法を学習します。
いくつかのシナリオでは、要素の属性が動的に変化します。 「id」、「name」などにすることができます。
例 :ユーザー名フィールドの「id」が「username_123」であり、XPathが次のようになるとします。
// * (@ id = ’username_123′) ただし、ページを再度開くと、「username」フィールドの「id」が変更され、新しい値が「username_234」になっている可能性があります。
この場合、フィールドのIDが他の値に変更されたため、セレンが以前に渡したXPathを見つけることができなかったため、テストは失敗します。
問題の種類に応じて、多くのアプローチがあります。
問題タイプ1: 属性値の一部が変更された場合 。
例 :上記の例のように、id値は変更されますが、一定のフィールドはほとんどありません。
「username_123」は「username_234」に変更されましたが、「username」は常に一定のままでした。
次のようにxpathを作成できます。
driver.findElement(By.xpath( 「// * (contains(@ id、 ’username’))」 ))。sendKeys( 「ユーザー名」 );
運転者 。 findElement(By.xpath( 「// * (starts-with(@ id、 ’user’))」 ))。sendKeys( 「ユーザー名」 );
「含む」 idに部分文字列usernameが含まれているかどうかをチェックするJavaメソッドです。
開始-with() 属性が「user」で始まるかどうかを確認します。
問題タイプ2: 属性の値全体が動的に変化する場合。
繰り返しますが、この場合、さまざまなアプローチが考えられます。
例えば :「ログイン」フィールドのIDが動的に変化し、containsメソッドを使用する定数値がない場合。
解決 :sendKeysの使用。
Seleniumは、ファンクションキーを使用するためのさまざまなAPIを提供します。たとえば、Tabキー、Enterキー、F5など。
ステップ1 : パスワードを入力する
driver.findElement(By.id( 'パスワード' ))。sendKeys( 'password'));
ステップ2 :キー機能を使用して要素に移動します。
driver.findElement(By.id( 'パスワード' ))。sendKeys(Keys。 入る ));
または
driver.findElement(By.id( 'パスワード' ))。sendKeys(Keys。 タブ ));
結論
Webテーブル、フレーム、および動的要素は、Webプロジェクトの重要な部分です。 Webテーブルと動的要素を処理するための効果的なコードを作成することが常に望ましいです。
動的要素を処理する際に非常に役立つ汎用XPathの構築を理解する。フレームの場合、スクリプトはフレームを切り替えてから要素を操作する必要があります。
サイバーセキュリティを学ぶための最高の本
次のチュートリアル#19 :次のSeleniumチュートリアルでは、 例外の種類と、SeleniumスクリプトのJavaで例外を処理する方法について。
Webテーブル、フレーム、動的要素の処理に関連するクエリがある場合は、投稿してください。
推奨読書
- Seleniumスクリプトを構築するためにChromeおよびIEブラウザーで要素を見つける方法– Seleniumチュートリアル#7
- Webページ上のドロップダウン要素を処理するためのSeleniumSelectクラスの使用– Seleniumチュートリアル#13
- Seleniumロケーター:SeleniumでXPathを使用してWeb要素を特定する(例)
- SeleniumスクリプトのWeb要素を識別するためのCSSセレクターの使用方法– Seleniumチュートリアル#6
- さまざまなタイプのWebDriverコマンドを使用してWeb要素の可視性を確認する– Seleniumチュートリアル#14
- Cucumber Seleniumチュートリアル:Cucumber Java SeleniumWebDriverの統合
- SeleniumとJMeterの統合
- Selenium WebDriver switchTo()メソッドを使用したiFrameの処理