Saturday 22 October 2016

Selenium Test to Check Links in Web Page are working

Testing all the links inside a web page is working fine or not is most important testing scenario. We can test this scenario very easily with selenium. As we know the links will be inside html tag <a> we can use By.tagName("a") locator and use an iterator in java to make the process simple.

This Simple example will help you perform various types of testing like -

1. Testing broken links on webpage using selenium.
2. Clicking on a link or click on all links on  web page to verify links are working fine.
3. Counting number of Links on web page.
4. Getting List of Links on web page.
5. Find out list of non working links on webpage.

Example -

Consider we want to test all links in homepage of www.qaautomated.com

Test Case -

Check out below test case and read the descriptions mentioned in the comment section to understand the flow.

package selenium.tests;

import java.util.List;



import java.util.concurrent.TimeUnit;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class TestAllLinks { 
 
 public static void main(String[] args) {
        String baseUrl = "http://www.qaautomated.com/";
        System.setProperty("webdriver.chrome.driver", 
         "C:\\Users\\chromedriver_win32\\chromedriver.exe");
        WebDriver driver=new ChromeDriver();
        String notWorkingUrlTitle = "Under Construction: QAAutomated";
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        driver.get(baseUrl);
        List<WebElement> linkElements = driver.findElements(By.tagName("a"));
        String[] linkTexts = new String[linkElements.size()];
        int i = 0;

        //extract the link texts of each link element
        for (WebElement elements : linkElements) {
            linkTexts[i] = elements.getText();
            i++;
        }

        //test each link
        for (String t : linkTexts) {
            driver.findElement(By.linkText(t)).click();
            if (driver.getTitle().equals(notWorkingUrlTitle )) {
                System.out.println("\"" + t + "\""
                        + " is not working.");
            } else {
                System.out.println("\"" + t + "\""
                        + " is working.");
            }
            driver.navigate().back();
        }
        driver.quit();
    }
}

Output -

"Home" is working fine
"About Me" is working fine
"Contact Us" is not working ....

If you find this useful please share the post with your friends using share options given below. You can write your feedback and suggestion in the comment section.

5 comments:

  1. When Executed above code i have encountered this erorr-Exception in thread "main" org.openqa.selenium.WebDriverException: Element is not clickable at point (104.5, 30). Other element would receive the click:
    Command duration or timeout: 87 milliseconds

    ReplyDelete
  2. As a dynamic language whose design philosophy revolves around readability and conciseness, Python is a popular choice for use as a scripting language. data science course in india

    ReplyDelete
  3. Open source programs are powerful, but can be difficult to use. Command line interfaces, minimal documentation and no built-in help can challenge users who are used to GUI interfaces and extensive help files in commercial software. best course to learn Flask

    ReplyDelete
  4. Hi, I thought you would explain this with the help of HttpURLConnection class and by first finding the response code then putting condition response code>400 then treat as broken link. But you have done it in a very different way.

    ReplyDelete