Find element by link text in Selenium Python - Build an Automation Script
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import unittest class TestLinkTextNavigation(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.get('https://example.com') self.wait = WebDriverWait(self.driver, 10) def test_click_about_us_link(self): # Wait until the link with text 'About Us' is clickable about_link = self.wait.until( EC.element_to_be_clickable((By.LINK_TEXT, 'About Us')) ) about_link.click() # Wait until URL changes to expected self.wait.until(EC.url_to_be('https://example.com/about')) # Assert current URL is correct current_url = self.driver.current_url self.assertEqual(current_url, 'https://example.com/about') def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main()
This test script uses Selenium WebDriver with Python's unittest framework.
In setUp, it opens the browser and navigates to the homepage.
The test test_click_about_us_link waits explicitly for the link with exact text 'About Us' to be clickable using By.LINK_TEXT. Then it clicks the link.
It waits until the URL changes to the expected About Us page URL, then asserts the current URL matches.
Finally, tearDown closes the browser to clean up.
This approach ensures the test waits properly for elements and page loads, making it reliable and clear.
Now add data-driven testing to click links with texts 'About Us', 'Contact', and 'Services' and verify their URLs
Practice
find_element_by_link_text do?Solution
Step 1: Understand the method purpose
find_element_by_link_textspecifically searches for anchor (<a>) elements by their visible text on the page.Step 2: Compare with other locator types
Other methods like finding by tag name, class name, or XPath do not focus on link text but on different attributes or structures.Final Answer:
It finds a link on the page by its exact visible text. -> Option CQuick Check:
find_element_by_link_text = exact link text match [OK]
- Confusing link text with partial text
- Using it to find non-link elements
- Assuming it matches partial text automatically
Solution
Step 1: Recall Selenium method naming
The correct method to find a link by its exact text isfind_element_by_link_text.Step 2: Check method call syntax
The method is called on the driver object with the link text as a string argument, e.g.,driver.find_element_by_link_text("Home").Final Answer:
driver.find_element_by_link_text("Home") -> Option DQuick Check:
Correct method name and syntax = driver.find_element_by_link_text("Home") [OK]
- Using incomplete or incorrect method names
- Missing parentheses or quotes
- Confusing with other locator methods
element = driver.find_element_by_link_text("Contact Us")
print(element.tag_name)Solution
Step 1: Understand what find_element_by_link_text returns
This method returns the anchor (<a>) element whose visible text matches exactly "Contact Us".Step 2: Check the tag name of a link element
Links in HTML are represented by the <a> tag, soelement.tag_namewill be "a".Final Answer:
a -> Option AQuick Check:
Link tag name = "a" [OK]
- Assuming tag name is 'div' or 'span'
- Expecting text output instead of tag name
- Not handling exceptions if link missing
element = driver.find_element_by_link_text('About')
print(element.text)Assume the link text on the page is "About Us".
Solution
Step 1: Check link text matching requirement
The methodfind_element_by_link_textrequires exact visible text match. "About" does not match "About Us" exactly.Step 2: Identify the error and fix
Because of mismatch, Selenium raises NoSuchElementException. Fix is to use the exact link text:'About Us'.Final Answer:
NoSuchElementException because link text does not match exactly; fix by using full text "About Us". -> Option BQuick Check:
Exact text match needed = NoSuchElementException because link text does not match exactly; fix by using full text "About Us". [OK]
- Using partial link text with find_element_by_link_text
- Confusing element.text with get_text()
- Ignoring exception when element not found
Solution
Step 1: Understand the problem with exact link text
Since the link text changes between "Learn More" and "Learn More About Us", exact match withfind_element_by_link_textwill fail for one variation.Step 2: Use partial link text locator
find_element_by_partial_link_text("Learn More")matches any link containing "Learn More", covering both cases reliably.Step 3: Consider other options
Using id requires knowing the id attribute, which may not exist. Clicking the first <a> tag is unreliable and may click wrong link.Final Answer:
Use find_element_by_partial_link_text("Learn More") to match both variations. -> Option AQuick Check:
Partial link text matches multiple variations [OK]
- Using exact link text when text varies
- Assuming link has id without checking
- Clicking first link without filtering
Ready to prove it?
Pass the test and this pattern moves unknown
