での Web テーブルの処理方法 Selenium

⚡ スマートサマリー

Selenium Web テーブルの処理により、QA エンジニアは XPath、CSS、および Selenium 4 つの相対ロケーター。この記事では、静的テーブル、ネストされたテーブル、属性述語、および動的グリッドのための AI 技術について解説します。

  • 🧱 XPathの構造: すべてのテーブルロケーターは //table で始まり、述語を使用して tbody、tr、td を掘り下げます。
  • 🔁 動的な行: findElementsはWebElementsのリストを返すため、ループ内で実行時に行数をカウントしたり、セルを読み取ったりすることができます。
  • 🪄 Selenium 4: 上、下、および近傍の相対位置指定により、既知のアンカー要素周辺のセルをターゲットにすることが容易になります。
  • 🧠 AIロケーター: 自己修復ツールは、列のずれを検出し、手動でのXPath編集なしに行の識別情報を復元します。
  • 🛠️ ショートカットを検査する: ブラウザの開発者ツールは完全なXPathをコピーしますが、信頼性を高めるために最初のテーブルまで切り詰めることができます。

Selenium WebテーブルのXPathの例

Web テーブルとは Selenium?

A ウェブテーブル in Selenium は、データや情報を表形式で表示するために使用されるWebElementです。表示されるデータは、静的データでも動的データでも構いません。Webテーブルのセルと行には、WebElementメソッドとロケーターを組み合わせてアクセスします。典型的な例としては、eコマースの商品ページに表示される商品仕様グリッドが挙げられます。

HTMLウェブテーブルの読み取り

テスターは、HTMLテーブル内の要素(通常はテキスト値)にアクセスする必要がある場面が多々あります。しかし、Webデザイナーは個々のセルにid属性やname属性を付与することはほとんどありません。そのため、By.id()、By.name()、By.cssSelector()といったメソッドは、ほとんど機能しません。このような場合、テーブルタグ内の親子関係をたどるBy.xpath()が最も信頼性の高い選択肢となります。

での Web テーブルの処理方法 Selenium

Web テーブルを処理するための以下の HTML コードを検討してください。 Selenium.

TableのXPathの書き方 Selenium

我々は使用するだろう XPath 「XNUMX 番目のセル」というテキストを含むセルの内部テキストを取得します。

TableのXPathの書き方 Selenium

ステップ 1 – 親要素 (テーブル) を設定する

WebDriver の XPath ロケーターは常に二重スラッシュ「//」で始まり、その後に親要素が続きます。。ここでは Web テーブルを扱っているため、 Selenium、親要素は常に鬼ごっこ。私たちの最初の部分は、 Selenium したがって、XPath テーブルロケーターは「//table」で始まる必要があります。

Selenium Web テーブルの例

ステップ 2 – 子要素を追加する

直下の要素は、 それでは逆に、は親ですXPath のすべての子要素は、以下に示すように、親要素の右側にスラッシュ「/」で区切られて配置されます。

Selenium Web テーブルの例

ステップ 3 – 述語を追加する

の要素には2つ含まれていますタグ。この2つタグは、 それで両方の親です。要素は兄弟関係にある。 兄弟姉妹とは、同じ親を共有する子要素のことです。.

到達するために「第4セル」を含むものにアクセスするには、まず 2番目の 最初のものではありません。「//table/tbody/tr」とだけ書くと最初のものが対象になります。タグ。

では、2番目のものにアクセスするにはどうすればよいでしょうか? ?答えは、 述語. 述語とは、角括弧「[ ]」で囲まれた数値またはHTML属性であり、子要素を兄弟要素と区別するものです。必要な行は2行目なので、述語として「[2]」を使用します。

 Selenium Web テーブルの例

述語を省略すると、XPath は最初の兄弟を返します。したがって、以下の XPath コードのいずれも最初の兄弟に到達します。 。

Selenium Xpathを使用したWebテーブル

ステップ 4 – 適切な述語を使用して後続の子要素を追加する

次に必要な要素は2番目ですステップ2とステップ3のルールを適用すると、以下に示すXPathが得られます。

の Web テーブル Selenium Xpathを使用する

正しいXPathロケーターがわかったので、以下のコードを使ってセルにアクセスし、その内部テキストを読み取ることができます。これは、HTMLページをCドライブに「newhtml.html」という名前で保存済みであることを前提としています。

の Web テーブル Selenium Xpathを使用する

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/write-xpath-table.html";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//table/tbody/tr[2]/td[2]")).getText();
    System.out.println(innerText);
    driver.quit();
}

の Web テーブル Selenium Xpathを使用する

ネストしたテーブルへのアクセス

同じ原則は、ネストされたテーブルにも適用されます。 ネストされたテーブルとは、別のテーブルの中に配置されたテーブルのことです。。 以下に例を示します。

ネストされたテーブルにアクセスする方法 Selenium

前のセクションで説明した親/子と述語の概念を使用して、「4-5-6」というテキストを含むセルにアクセスするには、以下に示す XPath を構成できます。

ネストされたテーブルにアクセスする方法 Selenium

以下のWebDriverコードは、対象セルの内部テキストを取得します。

ネストされたテーブルへのアクセス Selenium

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/accessing-nested-table.html";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//table/tbody/tr[2]/td[2]/table/tbody/tr/td[2]")).getText();
    System.out.println(innerText);
    driver.quit();
}

以下の出力は、内部テーブルに正常にアクセスされたことを確認します。

ネストされたテーブルへのアクセス Selenium

属性を述語として使用する

要素がHTMLの奥深くに位置していて、兄弟要素の数を数えるのが困難な場合は、その要素固有の属性を使用することができます。

以下の例では、「ニューヨークからシカゴ」セルは、 Mercury ツアーのホームページ。

Selenium 属性を述語として使用する Web テーブルの例

Selenium 属性を述語として使用する Web テーブルの例

テーブルの固有属性(width=”270″)を述語として使用できます。 属性は、先頭に @ 記号を付けることで述語として使用されます。上記の例では、「ニューヨークからシカゴ」セルは最初のセルに位置しています。 4番目のしたがって、XPathは以下の図のようになるはずです。

Selenium 属性を述語として使用した Web テーブルの例

XPath を内部に配置するときは、次の点に注意してください。 Java「270」の周りの二重引用符をバックスラッシュでエスケープして、By.xpath() 文字列が途中で終了しないようにします。

Selenium 属性を述語として使用した Web テーブルの例

これで、以下のコードを使用してそのセルにアクセスする準備が整いました。

Selenium 属性を述語として使用した Web テーブルの例

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table[@width=\"270\"]/tbody/tr[4]/td"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

Selenium 属性を述語として使用した Web テーブルの例

ショートカット: 要素の検査を使用してテーブルにアクセスする Selenium

要素のインデックスや属性を取得するのが難しい場合、XPathを生成する最も速い方法は、最新のブラウザの開発者ツールにある「要素を検証」を使用することです。

以下の例を考えてみましょう。 Mercury ツアーのホームページ。

Selenium 属性を述語として使用した Web テーブルの例

ステップ 1

対象のセルを右クリックして「検証」を選択するとDOMパスが表示され、完全なXPathをコピーできます。

Selenium 属性を述語として使用した Web テーブルの例

ステップ 2

最初の「table」親要素を探し、その左側にあるものをすべて削除します。

Selenium 属性を述語として使用した Web テーブルの例

ステップ 3

残りのXPathの先頭に二重スラッシュ「//」を付けて、WebDriverコードにコピーしてください。

Selenium 属性を含む Web テーブルの例

以下のWebDriverコードは、深くネストされた要素の内部テキストを取得します。

Selenium 属性を含む Web テーブルの例

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table/tbody/tr/td[2]"
        + "//table/tbody/tr[4]/td/"
        + "table/tbody/tr/td[2]/"
        + "table/tbody/tr[2]/td[1]/"
        + "table[2]/tbody/tr[3]/td[2]/font"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

動的Webテーブルの行と列を数える方法

ダッシュボードや検索結果などの動的な Web テーブルは、読み込みごとに異なる行数を表示します。これらを処理するには、 findElements すべてのリストに格納し、ループ処理で各セルを読み取ります。以下のコードスニペットは、IDが「customers」のテーブル内の行数をカウントし、すべてのセルを読み取ります。

List<WebElement> rows = driver.findElements(
    By.xpath("//table[@id='customers']//tr"));
System.out.println("Total rows: " + rows.size());

for (int i = 1; i <= rows.size(); i++) {
    List<WebElement> cells = driver.findElements(
        By.xpath("//table[@id='customers']//tr[" + i + "]/td"));
    for (WebElement cell : cells) {
        System.out.println(cell.getText());
    }
}

ロケーターを WebDriverWait   visibilityOfAllElementsLocatedBy テーブルがAJAXによって読み込まれる際に、この処理が行われます。これにより、レンダリングの遅いグリッド上で古い要素参照が残るのを防ぎます。

Selenium 4. Webテーブルの相対ロケーター

Selenium 4では、視覚的な位置に基づいて要素を対象とする相対ロケーターが導入されました。これは、行の順序が変更されたためにXPathインデックスが機能しなくなった場合に役立ちます。 above(), below(), toLeftOf(), toRightOf(), near() すべてアンカーWebElementを受け入れます。

import static org.openqa.selenium.support.locators.RelativeLocator.with;

WebElement emailHeader = driver.findElement(By.xpath("//th[text()='Email']"));
WebElement emailCell = driver.findElement(
    with(By.tagName("td")).below(emailHeader));
System.out.println(emailCell.getText());

相対ロケーターは、列の順序が変わっても読みやすさを維持します。データ駆動型ページでは、明示的な待機処理と組み合わせることで、より効果的な結果が得られます。

動的なWebテーブルを処理するためのAIツール

AI支援テストプラットフォームは、頻繁に変更されるグリッド上のロケーターのメンテナンスを削減します。 Testim, マブル, 機能化 コンピュータビジョンとDOMモデルを組み合わせて、列のずれを検出し、ロケーターを自己修復します。固定のXPathインデックスではなく、ヘッダーテキストとセルの類似性に基づいて行を識別します。

純粋な Selenium プロジェクト、図書館など ヒーレニウム WebDriverをラップし、実行時に破損したロケーターを書き換えます。これらのツールをWebDriverWaitと組み合わせることで、UI変更のたびにセレクタを書き換えることなく、動的なテーブルスクリプトの安定性を維持できます。

製品概要

  • By.xpath() は Web テーブルのセルにアクセスする最も信頼性の高い方法です。 Selenium.
  • 兄弟の数を数えるのが難しい場合は、@記号を接頭辞として付けた一意の属性を述語として使用します。
  • findElementsはリストを返します動的テーブルにおける行数カウントをサポートする。
  • Selenium 4つの相対ロケーター(上、下、近く)により、位置指定XPathへの依存度が軽減されます。
  • DevToolsの要素検査機能は、深く埋め込まれたセルのXPath生成を高速化します。
  • AIツールなど TestimMabl、Healeniumは、グリッド変更のための自己修復ロケーターです。

よくあるご質問

ウェブテーブル Selenium これは、行と列に表形式のデータを表示するWebElementです。静的にも動的にも使用できます。表では個々のセルに一意のIDが付与されることは稀であるため、テスターはWebElementメソッドとXPathまたはCSSロケーターを組み合わせてセルにアクセスします。

ほとんどのテーブルセルには id または name 属性がないため、By.id() や By.name() は機能しません。XPath は、table、tbody、tr、td 要素の親子構造をたどるため、セルの最も信頼性の高いロケーターとなります。

行数をカウントするには driver.findElements(By.xpath(“//table[@id='tbl']//tr”)).size() を、列数をカウントするには //table[@id='tbl']//tr[1]/td を使用します。findElements メソッドはリストを返します。行の合計を素早く計算するための size() 関数をサポートしています。

Selenium バージョン4では、above()、below()、toLeftOf()、toRightOf()、near()などの相対ロケータが導入されました。これらは、既知のアンカーセルの周囲に配置されたセルを対象とするのに役立ち、動的テーブルでXPathインデックスが変更される場合に便利です。

findElements 関数で各行をループ処理し、getText() 関数で各セルを読み取ります。//tr[“+i+”]/td[“+j+”] のように文字列連結を使用して XPath を動的に構築します。値を読み取る前に、WebDriverWait を使用してテーブルの読み込みが完了するまで待機します。

はい。AI を活用したツール TestimMablやFunctionizeは、コンピュータビジョンとDOMモデルを使用してテーブルの境界を検出し、ヘッダーを推測し、列が移動した際にロケーターを自己修復します。これにより、動的なダッシュボードにおけるXPathのメンテナンスが軽減されます。

AIモデルは過去の実行結果から行パターンを学習し、固定インデックスではなくテキストの類似性に基づいてセルを照合します。行が移動したり列の順序が変更されたりしても、AIロケーターはXPathを書き換えることなくターゲットを検出します。

findElement は単一の WebElement を返し、存在しない場合は NoSuchElementException をスローします。findElements はリストを返します。一致するものが見つからない場合は空のリストを返します。検索時には findElements を使用してください。ping テーブルの行または列にわたって。