JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

Seleniumのロケーター徹底解説:id・name・xpath・css、どれを使うべきか?

Seleniumで要素を特定する際に使えるロケーター(id、name、xpath、css)には、それぞれ特徴と役割があります。ここでは、それぞれの使い分けのポイントを詳しく解説します。

ロケーターの優先順位

まず確認すべきは、ページ内に一意(ユニーク)な属性値が存在するかどうかです。idやnameなどの一意な属性値があれば、それらを最優先で使用しましょう。一意な要素が見つからない場合は、処理速度の面で有利なcssセレクターを選択するのが効果的です。

cssセレクターとXPathの違い

cssセレクターには一つ弱点があります。それは、子ノードから親ノードへ遡って移動できないという点です。つまり、後方への探索ができません。

一方、xpathはこの逆方向の探索が可能です。xpathはSeleniumで最も広く使われているロケーターであり、DOMの要素や属性を辿りながら目的のオブジェクトを特定します。

絶対パスと相対パス

xpathは「/」(単一スラッシュ)と「//」(二重スラッシュ)の2つの方法で表現されます。

絶対パス(単一スラッシュ「/」)

単一のフォワードスラッシュは絶対パスを意味します。この場合、xpathはDOM内を親から子へ直接辿ります。そのため、ルートノードからターゲット要素まで順番に指定する必要があります。

構文:

driver.findElement(By.xpath("/html/body/div/input")).

相対パス(二重スラッシュ「//」)

二重のフォワードスラッシュは相対パスを意味します。この場合、xpathはDOM全体のあらゆる場所から条件に一致する要素を探します。特定の開始地点は必要ありません。

構文:

driver.findElement(By.xpath("//input[@name=’Tutorial’]")).

相対xpathが推奨される理由

実務では、絶対xpathよりも相対xpathを使用することが強く推奨されます。絶対xpathではルートから対象要素までの全経路を指定するため、途中の属性やその値が少しでも変更されると、xpathが正しく機能しなくなるリスクがあります。相対xpathであれば、その影響を受けにくく、保守性にも優れています。

実装例

以下は、xpathを使ってページ上の入力要素を特定し、クリックするJavaのコード例です。

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
public class TextMatch {
   public static void main(String[] args) {
      System.setProperty("webdriver.chrome.driver",    "C:\\Users\\ghs6kor\\Desktop\\Java\\chromedriver.exe");
      WebDriver driver = new ChromeDriver();
      String url = " https://www.tutorialspoint.com/questions/index.php";
      driver.get(url);
      driver.manage().window().maximize();
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
      //xpathで要素を特定
      driver.findElement(By.xpath("//input[@class=’gsc-input’]")).click();
      driver.close();
   }
}

  1. CSSとJavaScriptでクラス名に基づいてDIV要素をフィルタリングする方法

    Webページでは、ボタンの操作に応じて特定のカテゴリの要素だけを表示したり非表示にしたりする「フィルタリング機能」がよく使われます。この記事では、CSSとJavaScriptを組み合わせて、DIV要素のクラス名に基づいてフィルタリングを行う方法を解説します。 実装のポイント この仕組みは、次の3つの要素で構成されています。 表示・非表示の制御:初期状態では全要素を display: none; で非表示にし、show クラスが付いた要素のみ display: block; で表示します。 フィルタリング処理:JavaScriptで各要素のクラス名を確認し、選択されたカテゴリに一致する要素に

  2. iPhoneの名前を変更する方法と、変更すべき理由を徹底解説

    新しいiPhoneには、デフォルトであなたの本名が含まれた名前が自動的に付けられています。Apple IDの登録や初期設定時にペンネームなどを使用していない限り、iPhoneの名前にも本名がそのまま表示されることになります。この記事では、iPhoneの名前を変更する具体的な手順を詳しく解説します。さらに、iPhoneに接続したBluetoothアクセサリの名前を変更する方法や、画面が正常に動作しない場合でも名前を変更できるテクニックもご紹介します。iPhoneの名前を変更すべき理由iPhoneのデフォルト名には本名が含まれているため、AirDrop経由でプライバシーが漏洩するリスクがあります。