Suchen Sie Elemente nach Linktext und teilweisem Linktext in Selenium

Was ist Linktext? Selenium?

A Text verlinken Selenium wird verwendet, um die Hyperlinks auf einer Webseite zu identifizieren. Die Ermittlung erfolgt mit Hilfe eines Ankertags. Zum Erstellen der Hyperlinks auf einer Webseite können wir ein Anker-Tag gefolgt vom Linktext verwenden.

Links, die einem Kriterium entsprechen

Auf Links kann über eine exakte oder teilweise Übereinstimmung ihres Linktextes zugegriffen werden. Die folgenden Beispiele stellen Szenarien dar, in denen mehrere Übereinstimmungen vorhanden wären, und erläutern, wie WebDriver damit umgehen würde.

In diesem Tutorial lernen wir die verfügbaren Methoden kennen, um die Links mithilfe von Webdriver zu finden und darauf zuzugreifen. Außerdem werden wir einige der häufigsten Probleme besprechen, die beim Zugriff auf Links auftreten, und weiter darüber diskutieren, wie diese behoben werden können.

Vervollständigen Sie den Linktext in Selenium – By.linkText()

Der Zugriff auf Links über ihren genauen Linktext erfolgt über die Methode By.linkText(). Wenn es jedoch zwei Links gibt, die den gleichen Linktext haben, greift diese Methode nur auf den ersten zu. Betrachten Sie den folgenden HTML-Code

Text verknüpfen Selenium–By.LinkText()

Text verknüpfen Selenium–By.LinkText()

Wenn Sie versuchen, den folgenden WebDriver-Code auszuführen, gelangen Sie zum ersten „Hier klicken“-Link

Text verknüpfen Selenium–By.LinkText()

Code:

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 = "http://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();			
    }		

}			

So funktioniert es:

Text verknüpfen Selenium–By.LinkText()

Dadurch werden Sie automatisch zu Google weitergeleitet.

Text verknüpfen Selenium–By.LinkText()

Vervollständigen Sie den teilweisen Linktext in Selenium – By.partialLinkText()

Der Zugriff auf Links über einen Teil ihres Linktextes erfolgt über die By.partialLinkText() Methode. Wenn Sie einen teilweisen Linktext angeben, der mehrere Übereinstimmungen aufweist, wird nur auf die erste Übereinstimmung zugegriffen. Betrachten Sie den folgenden HTML-Code.

Teilweiser Linktext eingefügt Selenium – By.partialLinkText()

Teilweiser Linktext eingefügt Selenium – By.partialLinkText()

Wenn Sie den folgenden WebDriver-Code ausführen, werden Sie weiterhin zu Google weitergeleitet.

Teilweiser Linktext eingefügt Selenium – By.partialLinkText()

Code:

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 = "http://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();			
    }		
}

Teilweiser Linktext eingefügt Selenium – By.partialLinkText()

So erhalten Sie mehrere Links mit demselben Linktext

Wie kann man also das oben genannte Problem umgehen? Wie gehen wir vor, wenn es mehrere Links mit demselben Linktext gibt und wir auf andere Links als den ersten zugreifen möchten?

In solchen Fällen werden in der Regel unterschiedliche Locators verwendet viz… By.xpath(), By.cssSelector() oder By.tagName() verwendet werden.

Am häufigsten wird By.xpath() verwendet. Es ist das zuverlässigste, sieht aber kompliziert ausplex und nicht-readable Auch.

Groß-/Kleinschreibung beim Linktext beachten

Groß- und Kleinschreibung für Linktext

Die Parameter für By.linkText() und By.partialLinkText() Bei beiden wird die Groß-/Kleinschreibung beachtet, was bedeutet, dass die Groß- und Kleinschreibung wichtig ist. Auf der Homepage von Mercury Tours gibt es beispielsweise zwei Links, die den Text „egis“ enthalten – einer ist der Link „REGISTER“ im oberen Menü und der andere ist der Link „Hier registrieren“ unten rechts der Seite.

Groß- und Kleinschreibung für Linktext

Obwohl beide Links die Zeichenfolge „egis“ enthalten, greift die Methode „By.partialLinkText()“ je nach Groß- und Kleinschreibung der Zeichen separat auf diese beiden Links zu. Siehe den Beispielcode unten.

Groß- und Kleinschreibung für Linktext

Code

public static void main(String[] args) {								
        String baseUrl = "http://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();			

    }

Links außerhalb und innerhalb eines Blocks

Der neueste HTML5-Standard ermöglicht die Platzierung der Tags innerhalb und außerhalb von Tags auf Blockebene wie , oder . Die Methoden „By.linkText()“ und „By.partialLinkText()“ können auf einen Link zugreifen, der sich außerhalb und innerhalb dieser Elemente auf Blockebene befindet. Betrachten Sie den folgenden HTML-Code.

Links außerhalb und innerhalb eines Blocks

Links außerhalb und innerhalb eines Blocks

Der folgende WebDriver-Code greift mithilfe der By.partialLinkText()-Methode auf diese beiden Links zu.

Links außerhalb und innerhalb eines Blocks

Code:

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 = "http://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();			
    }		
}		

Die obige Ausgabe bestätigt, dass auf beide Links erfolgreich zugegriffen wurde, da ihre jeweiligen Seitentitel korrekt abgerufen wurden.

Zusammenfassung

  • Der Zugriff auf Links erfolgt über die Methode click().
  • Neben den für jedes WebElement verfügbaren Locators verfügen Links auch auf Linktext basierende Locators:
    • By.linkText() – findet die Links basierend auf der genauen Übereinstimmung des als Parameter bereitgestellten Linktextes.
    • By.partialLinkText() – findet Links basierend auf der teilweisen Textübereinstimmung des Linktextes.
  • Bei beiden oben genannten Locators wird die Groß-/Kleinschreibung beachtet.
  • Wenn es mehrere Übereinstimmungen gibt, wählen By.linkText() und By.partialLinkText() nur die erste Übereinstimmung aus. In solchen Fällen, in denen mehrere Links mit demselben Linktext vorhanden sind, werden andere Locators basierend auf xpath, CSS verwendet.
  • Die Methoden findElements() und By.tagName(„a“) finden alle Elemente auf der Seite, die den Locator-Kriterien entsprechen
  • Auf Links kann mit By.linkText() und By.partialLinkText() zugegriffen werden, unabhängig davon, ob sie sich innerhalb oder außerhalb von Elementen auf Blockebene befinden.