Friday, September 20, 2013

Selenium test throws java.lang.NoClassDefFoundError: org/apache/http/conn/scheme/SchemeSocketFactory

Recently I got started on functional testing for a web application at work. As directed by seleniumhq.org, I added the following dependency in my pom.xml.
    
        org.seleniumhq.selenium
        selenium-java
        2.35.0
    
But that resulted in the following exceptions stack trace:
java.lang.NoClassDefFoundError: org/apache/http/conn/scheme/SchemeSocketFactory
 at org.openqa.selenium.remote.HttpCommandExecutor.(HttpCommandExecutor.java:100)
 at org.openqa.selenium.remote.HttpCommandExecutor.(HttpCommandExecutor.java:81)
 at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:81)
 at org.openqa.selenium.firefox.FirefoxDriver.startClient(FirefoxDriver.java:251)
 at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:110)
 at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:195)
 at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:190)
 at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:186)
 at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:99)
 at ad.signin.FirstFunctionalTest.startWebDriver(FirstFunctionalTest.java:13)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
 at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
 at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
 at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
 at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
 at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
 at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
 at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
 at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
 at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
 at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
 at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
 at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63)
Caused by: java.lang.ClassNotFoundException: org.apache.http.conn.scheme.SchemeSocketFactory
 at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
 ... 30 more
After a little bit of fiddling around, adding the following dependency to pom.xml resolved the issue:
    
        org.apache.httpcomponents
        httpclient
        4.3
    

Friday, August 16, 2013