リンクテキストと部分リンクテキスト Selenium
リンクテキストとは何ですか Selenium?
A リンクテキスト Selenium Web ページ上のハイパーリンクを識別するために使用されます。 これはアンカー タグを使用して決定されます。 Web ページ上にハイパーリンクを作成するには、アンカー タグの後にリンク テキストを使用します。
基準に一致するリンク
リンク テキストの完全一致または部分一致を使用して、リンクにアクセスできます。 以下の例では、複数の一致が存在するシナリオを示し、WebDriver がそれらをどのように処理するかを説明します。
このチュートリアルでは、Webdriver を使用してリンクを見つけてアクセスするために利用できる方法を学習します。 また、リンクにアクセスするときに直面する一般的な問題のいくつかについて説明し、それらを解決する方法についてさらに説明します。
完全なリンクテキスト Selenium – By.linkText()
正確なリンク テキストを使用してリンクにアクセスするには、By.linkText() メソッドを使用します。。 ただし、まったく同じリンク テキストを持つリンクが XNUMX つある場合、このメソッドは最初のリンクにのみアクセスします。 以下の HTML コードを考えてみましょう。
以下の WebDriver コードを実行しようとすると、最初の「ここをクリック」リンクにアクセスすることになります。
コード:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class MyClass { public static void main(String[] args) { String baseUrl = "https://demo.guru99.com/test/link.html"; System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get(baseUrl); driver.findElement(By.linkText("click here")).click(); System.out.println("title of page is: " + driver.getTitle()); driver.quit(); } }
その仕組みは次のとおりです -
その結果、自動的に Google に移動します。
部分的なリンクテキストを完成させてください Selenium – By.partialLinkText()
リンク テキストの一部を使用してリンクにアクセスするには、 By.partialLinkText() 方法。 複数の一致がある部分的なリンク テキストを指定した場合は、最初に一致したもののみがアクセスされます。 以下の HTML コードを考えてみましょう。
以下の WebDriver コードを実行すると、引き続き Google に移動します。
コード:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class P1 { public static void main(String[] args) { String baseUrl = "https://demo.guru99.com/test/accessing-link.html"; System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get(baseUrl); driver.findElement(By.partialLinkText("here")).click(); System.out.println("Title of page is: " + driver.getTitle()); driver.quit(); } }
同じリンクテキストを持つ複数のリンクを取得する方法
では、上記の問題を回避するにはどうすればよいでしょうか? 同じリンクテキストを持つリンクが複数あり、最初のリンク以外のリンクにアクセスしたい場合はどうすればよいでしょうか?
このような場合、通常は、By.xpath()、By.cssSelector()、または By.tagName() などの異なるロケータが使用されます。
最もよく使用されるのは By.xpath() です。これは最も信頼性が高いですが、見た目が複雑で読みにくいです。
リンクテキストの大文字と小文字の区別
のパラメータ By.linkText() と By.partialLinkText() どちらも大文字と小文字が区別されるので、大文字と小文字が区別されます。たとえば、 Mercury Tours のホームページには、「egis」というテキストを含むリンクが 2 つあります。1 つは上部メニューにある「登録」リンクで、もう 1 つはページの右下にある「こちらから登録」リンクです。
どちらのリンクにも文字シーケンス「egis」が含まれていますが、XNUMX つは「By.partialLinkText()」メソッドが文字の大文字化に応じてこれら XNUMX つのリンクに別々にアクセスすることです。 以下のサンプルコードを参照してください。
Code
public static void main(String[] args) { String baseUrl = "https://demo.guru99.com/test/newtours/"; System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get(baseUrl); String theLinkText = driver.findElement(By .partialLinkText("egis")) .getText(); System.out.println(theLinkText); theLinkText = driver.findElement(By .partialLinkText("EGIS")) .getText(); System.out.println(theLinkText); driver.quit(); }
ブロックの外側と内側のリンク
最新の HTML5 標準では、 、 、 などのブロックレベルのタグの内側と外側にタグを配置できます。 「By.linkText()」メソッドと「By.partialLinkText()」メソッドは、これらのブロックレベル要素の外側と内側にあるリンクにアクセスできます。 以下の HTML コードを考えてみましょう。
以下の WebDriver コードは、By.partialLinkText() メソッドを使用してこれらのリンクの両方にアクセスします。
コード:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class MyClass { public static void main(String[] args) { String baseUrl = "https://demo.guru99.com/test/block.html"; System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get(baseUrl); driver.findElement(By.partialLinkText("Inside")).click(); System.out.println(driver.getTitle()); driver.navigate().back(); driver.findElement(By.partialLinkText("Outside")).click(); System.out.println(driver.getTitle()); driver.quit(); } }
上記の出力は、それぞれのページ タイトルが正しく取得されたため、両方のリンクが正常にアクセスされたことを確認します。
まとめ
- リンクには click() メソッドを使用してアクセスします。
- WebElement で使用できるロケーターとは別に、リンクにはリンク テキスト ベースのロケーターもあります。
- By.linkText() – パラメータとして提供されたリンクのテキストの完全一致に基づいてリンクを見つけます。
- By.partialLinkText() – リンクのテキストの部分一致に基づいてリンクを見つけます。
- 上記のロケーターはどちらも大文字と小文字が区別されます。
- 複数の一致がある場合、By.linkText() と By.partialLinkText() は最初の一致のみを選択します。 同じリンク テキストを持つ複数のリンクが存在する場合、xpath、CSS に基づく他のロケーターが使用されます。
- findElements() & By.tagName(“a”) メソッドは、ロケーター基準に一致するページ内のすべての要素を検索します。
- リンクは、ブロックレベル要素の内部または外部に関係なく、By.linkText() および By.partialLinkText() によってアクセスできます。