Headless Browser Testing using Selenium Webdriver with PhantomJS
Introduction:
PhantomJS is a Headless Webkit with JavaScript API. Webkit is the layout engine that Chrome, Safari, and a few other browsers use. It has fast & native support for various Web Standards: DOM handling, CSS selector, JSON, canvas and SVG. 



PhantomJS is used for Headless Browser Testing of Web Applications that comes with in-built GhostDriver. This means that the rendered web pages are never actually displayed.
PhantomJS is not a Test framework, it is used only to LAUNCH the tests via a suitable Test Runner.

Setting up of PhantomJS in Linux:

1. Download PhantomJS tar file
2. Extract PhantomJS tar file
$ tar xvf phantomjs-1.9.7-linux-i686.tar.bz2
3.Add PhantomJS  binary file folder to path
$ export PhantomJS_HOME=/home/selenium /resources/phantomjs-1.9.7-linux-i686/bin
$ export PATH=$PhantomJS_HOME:$PATH


You’re now ready to write some code. An easy way to get started is this example
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriverService;
import org.openqa.selenium.remote.DesiredCapabilities;

public class SeleniumPhantomJSExample  {

   @Test
   public static headlessBrowserTest()
   {
        DesiredCapabilities caps = new DesiredCapabilities();
       WebDriver driver = new PhantomJSDriver(caps);

        // And now use this to visit Google
        driver.get("http://www.google.com");
        // Alternatively the same thing can be done like this
        // driver.navigate().to("http://www.google.com");

        // Find the text input element by its name
        WebElement element = driver.findElement(By.name("q"));

        // Enter something to search for
        element.sendKeys("Cheese!");

        // Now submit the form. WebDriver will find the form for us from the element
        element.submit();

        // Check the title of the page
        System.out.println("Page title is: " + driver.getTitle());
       
        // Google's search is rendered dynamically with JavaScript.
        // Wait for the page to load, timeout after 10 seconds
        (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                return d.getTitle().toLowerCase().startsWith("cheese!");
            }
        });

        // Should see: "cheese! - Google Search"
        System.out.println("Page title is: " + driver.getTitle());
       
        //Close the browser
        driver.quit();
    }
}

Add below maven dependency to pom.xml
<dependency>
                <groupId>com.github.detro.ghostdriver</groupId>
                <artifactId>phantomjsdriver</artifactId>
                <version>1.1.0</version>
</dependency>

If you are facing any SSL issue. Add below statement to resolve cap.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, new String[]{"--web-security=false", "--ssl-protocol=any","--ignore-ssl-errors=true"});