Friday, 26 February 2016

Find out broken links / images on website using webDriver



Broker Links: 

By just seeing the Links in the UI, we may not be able to confirm if that link is working or not until we click and verify it.

To achieve this, we can use HttpClient library to check status codes of the URLs on a page.


If request was NOT processed correctly, then the HTTP status codes may not return 200 status code. We can easily say whether the link is broken or not with status codes.
Now let us jump into the example, First we will try to find all anchor tags on the page by using Webdriver. By using the below syntax:
We need to iterate through each link and verify request response Status codes and it should be 200 if not, we will increment invalid links count
Let us look into the example :


package com.linked; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClientBuilder; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class FindBrokenLinksExample { private WebDriver driver; private int invalidLinksCount; @BeforeClass public void setUp() { driver = new FirefoxDriver(); driver.get("http://google.com"); } @Test public void validateInvalidLinks() { try { invalidLinksCount = 0; List<WebElement> anchorTagsList = driver.findElements(By .tagName("a")); System.out.println("Total no. of links are " + anchorTagsList.size()); for (WebElement anchorTagElement : anchorTagsList) { if (anchorTagElement != null) { String url = anchorTagElement.getAttribute("href"); if (url != null && !url.contains("javascript")) { verifyURLStatus(url); } else { invalidLinksCount++; } } } System.out.println("Total no. of invalid links are " + invalidLinksCount); } catch (Exception e) { e.printStackTrace(); System.out.println(e.getMessage()); } } @AfterClass public void tearDown() { if (driver != null) driver.quit(); } public void verifyURLStatus(String URL) { HttpClient client = HttpClientBuilder.create().build(); HttpGet request = new HttpGet(URL); try { HttpResponse response = client.execute(request); // verifying response code and The HttpStatus should be 200 if not, // increment invalid link count //We can also check for 404 status code response.getStatusLine().getStatusCode() == 404
if (response.getStatusLine().getStatusCode() != 200) invalidLinksCount++; } catch (Exception e) { e.printStackTrace(); } } }

-------------------------------------------------------------------------


Broken Images:

package com.linked; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClientBuilder; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class FindBrokenImages { private WebDriver driver; private int invalidImageCount; @BeforeClass public void setUp() { driver = new FirefoxDriver(); driver.get("http://google.com"); } @Test public void validateInvalidImages() { try { invalidImageCount = 0; List<WebElement> imagesList = driver.findElements(By.tagName("img")); System.out.println("Total no. of images are " + imagesList.size()); for (WebElement imgElement : imagesList) { if (imgElement != null) { verifyimageActive(imgElement); } } System.out.println("Total no. of invalid images are " + invalidImageCount); } catch (Exception e) { e.printStackTrace(); System.out.println(e.getMessage()); } } @AfterClass public void tearDown() { if (driver != null) driver.quit(); } public void verifyimageActive(WebElement imgElement) { try { HttpClient client = HttpClientBuilder.create().build(); HttpGet request = new HttpGet(imgElement.getAttribute("src")); HttpResponse response = client.execute(request); // verifying response code he HttpStatus should be 200 if not, // increment as invalid images count if (response.getStatusLine().getStatusCode() != 200) invalidImageCount++; } catch (Exception e) { e.printStackTrace(); } } }

Webdriver - Set browser width and height


Selenium WebDriver allows resizing and maximizing window natively from its API. We use 'Dimension' class to resize the window.
Lets take the help of Selenium WebDrivers Dimension Class and declare object say 'd' by initializing it with width and height as 420X600 as shown below:
Remember, We need to import the statement 'import org.openqa.selenium.Dimension'
import org.openqa.selenium.Dimension; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.Test; public class browser { @Test public void openBrowserwithGivenDimension() { WebDriver driver = new FirefoxDriver(); driver.navigate().to("http://google.co.in"); System.out.println(driver.manage().window().getSize()); Dimension d = new Dimension(420,600); //Resize the current window to the given dimension driver.manage().window().setSize(d); } }
We can set the size and perform testing with lower resolution. We can also perform testing on Responsive sites which automatically get adjust based on the browser size.