Zoek elementen op linktekst en gedeeltelijke linktekst in Selenium
Waar zit linktekst in Selenium?
A Link tekst in Selenium wordt gebruikt om de hyperlinks op een webpagina te identificeren. Het wordt bepaald met behulp van een ankertag. Voor het maken van hyperlinks op een webpagina kunnen we een ankertag gebruiken, gevolgd door de link Tekst.
Links die voldoen aan een criterium
Links zijn toegankelijk via een exacte of gedeeltelijke overeenkomst van de linktekst. De onderstaande voorbeelden geven scenario's waarin er meerdere overeenkomsten zouden bestaan en leggen uit hoe WebDriver hiermee zou omgaan.
In deze tutorial leren we de beschikbare methoden om de links te vinden en te openen met behulp van Webdriver. Ook zullen we enkele van de veelvoorkomende problemen bespreken die u tegenkomt bij het openen van Links, en zullen we verder bespreken hoe u deze kunt oplossen.
Volledige linktekst in Selenium – Door.linkText()
Toegang krijgen tot links met behulp van hun exacte linktekst gebeurt via de By.linkText() methode. Als er echter twee links zijn die dezelfde linktekst hebben, heeft deze methode alleen toegang tot de eerste. Beschouw de onderstaande HTML-code
Wanneer u de onderstaande WebDriver-code probeert uit te voeren, krijgt u toegang tot de eerste 'klik hier'-link
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(); } }
Hier is hoe het werkt-
Hierdoor wordt u automatisch naar Google geleid.
Voltooi de gedeeltelijke linktekst in Selenium – By.partialLinkText()
Toegang krijgen tot links met behulp van een deel van hun linktekst gebeurt met behulp van de Door.partialLinkText() methode. Als u een gedeeltelijke linktekst opgeeft die meerdere overeenkomsten heeft, wordt alleen de eerste overeenkomst geopend. Beschouw de onderstaande HTML-code.
Wanneer u onderstaande WebDriver-code uitvoert, wordt u alsnog naar Google geleid.
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(); } }
Hoe u meerdere links met dezelfde linktekst kunt krijgen
Dus, hoe omzeil je het bovenstaande probleem? In gevallen waarin er meerdere links zijn met dezelfde linktekst en we toegang willen tot andere links dan de eerste, hoe gaan we dat dan doen?
In dergelijke gevallen worden doorgaans verschillende locators gebruikt, namelijk By.xpath(), By.cssSelector() of By.tagName().
Het meest gebruikt is By.xpath(). Dit is de meest betrouwbare, maar het ziet er complex en onleesbaar uit.
Hoofdlettergevoeligheid voor linktekst
De parameters voor Door.linkText() en Door.partialLinkText() zijn beide hoofdlettergevoelig, wat betekent dat hoofdlettergebruik ertoe doet. Bijvoorbeeld, binnen Mercury Op de startpagina van Tours zijn er twee links die de tekst “egis” bevatten – de ene is de link “REGISTREREN” in het bovenste menu, en de andere is de link “Registreer hier” rechtsonder op de pagina.
Hoewel beide links de tekenreeks “egis” bevatten, is er één die met de “By.partialLinkText()”-methode afzonderlijk toegang krijgt tot deze twee links, afhankelijk van het hoofdlettergebruik van de karakters. Zie de voorbeeldcode hieronder.
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 buiten en binnen een blok
Met de nieuwste HTML5-standaard kunnen tags binnen en buiten tags op blokniveau worden geplaatst, zoals , , of . De methoden “By.linkText()” en “By.partialLinkText()” hebben toegang tot een link die zich buiten en binnen deze elementen op blokniveau bevindt. Beschouw de onderstaande HTML-code.
De onderstaande WebDriver-code heeft toegang tot beide links met behulp van de By.partialLinkText()-methode.
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(); } }
De bovenstaande uitvoer bevestigt dat beide links met succes zijn geopend omdat hun respectieve paginatitels correct zijn opgehaald.
Samenvatting
- Links zijn toegankelijk via de click()-methode.
- Naast de locators die beschikbaar zijn voor elk WebElement, hebben Links ook op linktekst gebaseerde locators:
- Door.linkText() – lokaliseert de links op basis van de exacte overeenkomst met de tekst van de link die als parameter is opgegeven.
- Door.partialLinkText() – lokaliseert links op basis van de gedeeltelijke tekstovereenkomst van de tekst van de link.
- Beide bovenstaande locators zijn hoofdlettergevoelig.
- Als er meerdere overeenkomsten zijn, selecteren By.linkText() en By.partialLinkText() alleen de eerste overeenkomst. In dergelijke gevallen waarin meerdere links met dezelfde linktekst aanwezig zijn, worden andere locators op basis van xpath en CSS gebruikt.
- findElements() & By.tagName(“a”) methode vindt alle elementen op de pagina die voldoen aan de locatorcriteria
- Links zijn toegankelijk via By.linkText() en By.partialLinkText(), ongeacht of ze zich binnen of buiten elementen op blokniveau bevinden.