XPathで要素を検索する Selenium
⚡ スマートサマリー
XPathで要素を検索する Selenium FindElementsはページ上の単一のWeb要素を一意に識別するのに対し、FindElementsは一致する要素の完全なリストを返します。どちらのコマンドも、ID、名前、クラス名、XPath戦略を網羅したByロケーターオブジェクトを受け入れます。
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 要素の検索
「要素の検索」コマンドと「要素の検索」コマンドの主な違いは以下のとおりです。
| 要素の検索 | 要素の検索 |
|---|---|
| 同じロケーターで複数のウェブ要素が見つかった場合、最初のウェブ要素を返します。 | Web要素のリストを返します。 |
| ロケーター戦略に一致する要素がない場合、NoSuchElementException 例外をスローします。 | ロケーター戦略に一致する Web 要素がない場合は、空のリストを返します。 |
| XPath による要素の検索では、1 つの Web 要素しか見つかりません。 | ロケーター戦略に一致する要素のコレクションを見つけます |
| 適用されない | 各ウェブ要素は、配列のように0から始まる番号でインデックス付けされます。 |


