findElement by linkText in Selenium Java - Build an Automation Script
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.time.Duration; public class AboutUsLinkTest { private WebDriver driver; private WebDriverWait wait; @BeforeClass public void setUp() { // Set path to chromedriver executable if needed // System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); driver = new ChromeDriver(); wait = new WebDriverWait(driver, Duration.ofSeconds(10)); driver.manage().window().maximize(); } @Test public void testAboutUsLinkNavigation() { driver.get("https://example.com"); // Locate the link by exact visible text 'About Us' WebElement aboutUsLink = wait.until( ExpectedConditions.elementToBeClickable(By.linkText("About Us")) ); aboutUsLink.click(); // Wait until URL contains '/about' wait.until(ExpectedConditions.urlContains("/about")); // Assert the URL is exactly 'https://example.com/about' String currentUrl = driver.getCurrentUrl(); Assert.assertEquals(currentUrl, "https://example.com/about", "URL after clicking About Us link should be correct"); // Assert the page title contains 'About Us' String title = driver.getTitle(); Assert.assertTrue(title.contains("About Us"), "Page title should contain 'About Us'"); } @AfterClass public void tearDown() { if (driver != null) { driver.quit(); } } }
This test class uses Selenium WebDriver with Java and TestNG for assertions.
setUp(): Initializes ChromeDriver and WebDriverWait with a 10-second timeout. Maximizes the browser window for better visibility.
testAboutUsLinkNavigation(): Opens the homepage URL. Uses By.linkText("About Us") to find the link with exact visible text 'About Us'. Waits until the link is clickable, then clicks it.
After clicking, it waits until the URL contains '/about' to ensure the page has loaded. Then it asserts the URL is exactly 'https://example.com/about' and the page title contains 'About Us'.
tearDown(): Closes the browser after the test to free resources.
This structure follows best practices: explicit waits avoid timing issues, assertions verify expected outcomes, and the test is cleanly organized.
Now add data-driven testing to verify navigation for three different links: 'About Us', 'Contact', and 'Services'.
Practice
driver.findElement(By.linkText("Home")) do in Selenium Java?Solution
Step 1: Understand the method used
findElement(By.linkText("Home"))searches for a link whose visible text exactly matches "Home".Step 2: Differentiate from other locators
It does not find buttons or elements by id, nor does it find partial matches (that would bepartialLinkText).Final Answer:
Finds the first link on the page with visible text exactly "Home" -> Option AQuick Check:
Exact link text = Finds link by text [OK]
- Confusing linkText with partialLinkText
- Using linkText to find buttons or other elements
- Expecting partial matches with linkText
Solution
Step 1: Check correct method and parameter format
The methodfindElement(By.linkText("Contact Us"))uses double quotes around the string and parentheses correctly.Step 2: Identify syntax errors in other options
Options B, C, and D have missing quotes, wrong brackets, or braces which cause syntax errors.Final Answer:
driver.findElement(By.linkText("Contact Us")); -> Option AQuick Check:
Correct syntax uses parentheses and quotes [OK]
- Omitting quotes around link text
- Using wrong brackets like [] or {}
- Missing parentheses after method call
WebElement link = driver.findElement(By.linkText("About"));
System.out.println(link.getText());Assuming the page has a link with visible text exactly "About".
Solution
Step 1: Locate the link by exact text
The code finds the link with visible text "About" successfully because it exists on the page.Step 2: Print the visible text of the found element
link.getText()returns the visible text of the link, which is "About".Final Answer:
It prints "About" to the console -> Option CQuick Check:
getText() returns visible text [OK]
- Expecting getText() to print href attribute
- Assuming NoSuchElementException without checking page content
- Thinking getText() returns null if element found
driver.findElement(By.linkText("Login"));The page has a link with text "Log In" (with a space). What is the problem?
Solution
Step 1: Understand exact matching requirement
By.linkTextrequires the visible text to match exactly, including spaces.Step 2: Compare given text and actual link text
"Login" (no space) does not match "Log In" (with space), so element is not found.Final Answer:
The linkText must match the text exactly, so "Login" does not match "Log In" -> Option DQuick Check:
Exact text match required for linkText [OK]
- Assuming partial matches work with linkText
- Thinking spaces are ignored in linkText
- Believing findElement is deprecated for links
Solution
Step 1: Understand exact matching limitation
linkTextrequires exact text, so you must try both versions separately.Step 2: Use try-catch to attempt both texts
Try finding the link with "Terms & Conditions" first; if it throws exception, catch it and try "Terms and Conditions".Final Answer:
Use try-catch: try findElement(By.linkText("Terms & Conditions")), if fails try findElement(By.linkText("Terms and Conditions")) -> Option BQuick Check:
Try both exact texts with error handling [OK]
- Using partialLinkText that may match wrong links
- Assuming partial text "Terms" matches both safely
- Assuming id locator is always available
Ready to prove it?
Pass the test and this pattern moves unknown
