XPathで要素を検索する Selenium

⚡ スマートサマリー

XPathで要素を検索する Selenium FindElementsはページ上の単一のWeb要素を一意に識別するのに対し、FindElementsは一致する要素の完全なリストを返します。どちらのコマンドも、ID、名前、クラス名、XPath戦略を網羅したByロケーターオブジェクトを受け入れます。

  • 基本原則: FindElement は最初に一致する WebElement を返します。FindElements は、配列のように、0 から始まるインデックスのリストを返します。
  • ⚠️ 例外処理: FindElementは一致するものが存在しない場合にNoSuchElementExceptionをスローしますが、FindElementsは失敗する代わりに空のリストを返します。
  • 🧭 位置情報特定戦略: ID、名前、クラス名、タグ名、リンクテキスト、部分リンクテキスト、XPathの中から選択してください。
  • 🧩 実装の焦点: WebDriverスクリプトで要素を確実にターゲットにするには、一意のロケーター値を持つByオブジェクトを渡します。
  • 🚀 実用的なアプリケーション: ワーキング Java デモページでラジオボタンをクリックしたり、要素のリストを反復処理したりする例を示します。

XPathで要素を検索する Selenium

In Selenium WebDriver、 FindElement (NAIST) と 要素を探す これらは、クリックやテキスト入力などの操作を実行する前に、ページ上のウェブ要素を特定するために使用されるコアコマンドです。

「要素の検索」コマンドが必要な理由は何ですか?

ウェブページを操作するには、まずユーザーがウェブ要素を特定する必要があります。「要素の検索」コマンドはウェブページ内の単一のウェブ要素を一意に識別するために使用され、「要素の検索」コマンドはウェブ要素のリストを識別するために使用されます。要素は複数の方法で識別できます。 ロケーター戦略 ID、名前、クラス名、リンクテキスト、部分リンクテキスト、タグ名など XPath.

FindElement コマンド構文

以下は FindElement コマンドの構文です。 Selenium ウェブドライバー:

WebElement elementName = driver.findElement(By.LocatorStrategy("LocatorValue"));

FindElementコマンドはByオブジェクトをパラメータとして受け取り、WebElement型のオブジェクトを1つ返します。Byオブジェクトは、ID、名前、クラス名、XPathなど、さまざまなロケータ戦略で使用できます。

ロケーター戦略には、以下のいずれかの値を指定できます。

  • ID
  • 名前
  • クラス名
  • タグ名
  • リンクテキスト
  • 部分的なリンクテキスト
  • XPath

ロケーター値とは、Web要素を識別するために使用する一意の値です。開発者とテスターは、IDや名前などの特定のプロパティを使用してWeb要素が一意に識別できることを確認する責任があります。

例:

WebElement loginLink = driver.findElement(By.linkText("Login"));

例: 要素を検索 Selenium

以下のデモアプリケーションは、FindElementコマンドの動作を示すために使用されます。

https://demo.guru99.com/test/ajax.html

シナリオ:

ステップ1: AUTを開く

ステップ2: ラジオボタンを見つけてクリックし、次にチェックボタンをクリックします。

package com.sample.stepdefinitions;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class NameDemo {

public static void main(String[] args) {
// TODO Auto-generated method stub

System.setProperty("webdriver.chrome.driver", "D:\\3rdparty\\chrome\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();

driver.get("https://demo.guru99.com/test/ajax.html");

// Find the radio button for “No” using its ID and click on it
driver.findElement(By.id("no")).click();

//Click on Check Button
driver.findElement(By.id("buttoncheck")).click();

}

}

FindElements コマンド構文

指定されたロケーターに一致する要素のうち、最初の要素だけでなく、一致するすべての要素が必要な場合は、FindElements 関数を使用します。構文は以下のとおりです。

List<WebElement> elementName = driver.findElements(By.LocatorStrategy("LocatorValue"));

FindElementsコマンドは、Byオブジェクトをパラメータとして受け取り、Web要素のリストを返します。指定されたロケータ戦略とロケータ値を使用して要素が見つからない場合は、空のリストを返します。

例:

List<WebElement> listOfElements = driver.findElements(By.xpath("//div"));

例: 要素を検索 Selenium

同じデモアプリケーションを使用して、FindElementsが一致する要素のリストを反復処理する方法を示します。

シナリオ:

ステップ1: Video Cloud Studioで URL テスト対象アプリケーション向け

ステップ2: ラジオボタンのテキストを見つけて、出力コンソールに表示します。

package com.sample.stepdefinitions;

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class NameDemo {

public static void main(String[] args) {

    System.setProperty("webdriver.chrome.driver", "X://chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.get("https://demo.guru99.com/test/ajax.html");
    List<WebElement> elements = driver.findElements(By.name("name"));
    System.out.println("Number of elements:" +elements.size());

    for (int i=0; i<elements.size();i++){
      System.out.println("Radio button text:" + elements.get(i).getAttribute("value"));
    }
  }
}

要素の検索 vs 要素の検索

「要素の検索」コマンドと「要素の検索」コマンドの主な違いは以下のとおりです。

要素の検索と要素の検索 Selenium

要素の検索 要素の検索
同じロケーターで複数のウェブ要素が見つかった場合、最初のウェブ要素を返します。 Web要素のリストを返します。
ロケーター戦略に一致する要素がない場合、NoSuchElementException 例外をスローします。 ロケーター戦略に一致する Web 要素がない場合は、空のリストを返します。
XPath による要素の検索では、1 つの Web 要素しか見つかりません。 ロケーター戦略に一致する要素のコレクションを見つけます
適用されない 各ウェブ要素は、配列のように0から始まる番号でインデックス付けされます。

よくあるご質問

  Selenium 暗黙的または明示的な待機 そのため、ドライバーは要素が表示されるまでページをポーリングします。WebDriverWait を使用した明示的な待機と期待される条件は、動的な AJAX 駆動ページにおいて最も信頼性の高いアプローチです。

IDはブラウザが直接インデックスを作成するため、最も高速で信頼性の高いロケーターです。CSSセレクタは一般的にXPathよりも高速なので、XPathは一意のID、名前、クラスが利用できない場合に限って使用してください。

はい。AIを活用したテストアシスタントはDOMを分析し、安定したXPathやCSSロケーターを自動的に提案することで、手動による検査時間を短縮できます。 Rev一意性を確保するために、本番テストスイートに追加する前に、ロケーターを生成しました。

自己修復フレームワークは、AIを使用してUI変更後にロケーターが破損したことを検知し、最も近い一致する要素に自動的に置き換えます。これにより、要素属性の頻繁な変更に伴うテストの保守作業が軽減されます。