1 Reply Latest reply on Jul 13, 2012 5:59 AM by Karel Piwko

    Drone + Chrome: Error communicating with the remote browser

    Paul Rivera Newbie

      Hi,

       

      I'm using Arquillian Drone with the ChromeDriver.  I have a simple unit test that runs fine until when it reaches the end of the test method and closes the browser, it gives me this exception:

      org.openqa.selenium.remote.UnreachableBrowserException: Error communicating with the remote browser. It may have died.

      Build info: version: '2.24.1', revision: '17205', time: '2012-06-19 15:28:49'

      System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.6.0_29'

      Driver info: driver.version: RemoteWebDriver

                at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:467)

                at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:476)

                at org.openqa.selenium.remote.RemoteWebDriver.quit(RemoteWebDriver.java:346)

                at org.jboss.arquillian.drone.webdriver.factory.RemoteWebDriverFactory.destroyInstance(RemoteWebDriverFactory.java:115)

                at org.jboss.arquillian.drone.webdriver.factory.RemoteWebDriverFactory.destroyInstance(RemoteWebDriverFactory.java:49)

                at org.jboss.arquillian.drone.webdriver.factory.WebDriverFactory.destroyInstance(WebDriverFactory.java:81)

                at org.jboss.arquillian.drone.webdriver.factory.WebDriverFactory.destroyInstance(WebDriverFactory.java:43)

                at org.jboss.arquillian.drone.impl.DroneDestructor.destroyClassScopedDrone(DroneDestructor.java:79)

                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

                at java.lang.reflect.Method.invoke(Method.java:597)

                at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:90)

                at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)

                at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)

                at org.jboss.arquillian.test.impl.TestContextHandler.createClassContext(TestContextHandler.java:75)

                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

                at java.lang.reflect.Method.invoke(Method.java:597)

                at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:90)

                at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)

                at org.jboss.arquillian.test.impl.TestContextHandler.createSuiteContext(TestContextHandler.java:60)

                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

                at java.lang.reflect.Method.invoke(Method.java:597)

                at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:90)

                at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)

                at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135)

                at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115)

                at org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.afterClass(EventTestRunnerAdaptor.java:87)

                at org.jboss.arquillian.junit.Arquillian$3$1.evaluate(Arquillian.java:204)

                at org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:314)

                at org.jboss.arquillian.junit.Arquillian.access$100(Arquillian.java:46)

                at org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:199)

                at org.junit.runners.ParentRunner.run(ParentRunner.java:236)

                at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:147)

                at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:234)

                at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:133)

                at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:114)

                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

                at java.lang.reflect.Method.invoke(Method.java:597)

                at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:188)

                at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:166)

                at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:86)

                at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:101)

                at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:74)

      Caused by: org.openqa.selenium.WebDriverException: org.apache.http.conn.HttpHostConnectException: Connection to http://localhost:15821 refused

      Build info: version: '2.24.1', revision: '17205', time: '2012-06-19 15:28:49'

      System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.6.0_29'

      Driver info: driver.version: RemoteWebDriver

                at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:75)

                at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:446)

                ... 49 more

      Caused by: org.apache.http.conn.HttpHostConnectException: Connection to http://localhost:15821 refused

                at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:190)

                at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:151)

                at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:125)

                at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:702)

                at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:518)

                at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)

                at org.openqa.selenium.remote.HttpCommandExecutor.fallBackExecute(HttpCommandExecutor.java:319)

                at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:297)

                at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:66)

                ... 50 more

      Caused by: java.net.ConnectException: Connection refused: connect

                at java.net.PlainSocketImpl.socketConnect(Native Method)

                at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)

                at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)

                at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)

                at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)

                at java.net.Socket.connect(Socket.java:529)

                at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:127)

                at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)

                ... 58 more

       

       

      Its strange that its saying it cannot connect.  Because if I type in my browser: http://localhost:<randomPortChosen>/status, it gives me:

      {"status":0,"value":{"build":{"revision":"","time":"Jun 21 2012 11:22:58 PST","version":""},"os":{"arch":"x86","name":"Windows NT","version":"6.1 SP1"}}}

       

      I assume the ChromeDriver server is running correctly.

       

      Here's my pom.xml snippet:

       

      <properties>

              <version.arquillian>1.0.1.Final</version.arquillian>

              <version.shrinkwrap>2.0.0-alpha-1</version.shrinkwrap>

              <version.shrinkwrap.descriptors>1.1.0-alpha-2</version.shrinkwrap.descriptors>

              <version.arquillian.drone>1.1.0.CR1</version.arquillian.drone>

      </properties>

      ...

                  <dependencyManagement>

                      <dependencies>

                          <dependency>

                              <groupId>org.jboss.arquillian</groupId>

                              <artifactId>arquillian-bom</artifactId>

                              <version>${version.arquillian}</version>

                              <scope>import</scope>

                              <type>pom</type>

                          </dependency>

                          <dependency>

                              <groupId>org.jboss.arquillian.extension</groupId>

                              <artifactId>arquillian-drone-bom</artifactId>

                              <version>${version.arquillian.drone}</version>

                              <type>pom</type>

                              <scope>import</scope>

                          </dependency>

                      </dependencies>

                  </dependencyManagement>

      ...

                      <dependency>

                          <groupId>org.jboss.arquillian.junit</groupId>

                          <artifactId>arquillian-junit-container</artifactId>

                          <scope>test</scope>

                          <version>${version.arquillian}</version>

                      </dependency>

                      <dependency>

                          <groupId>org.jboss.arquillian.protocol</groupId>

                          <artifactId>arquillian-protocol-servlet</artifactId>

                          <version>${version.arquillian}</version>

                          <scope>test</scope>

                      </dependency>

                      <dependency>

                          <groupId>org.jboss.arquillian.container</groupId>

                          <artifactId>arquillian-container-spi</artifactId>

                          <version>${version.arquillian}</version>

                          <scope>test</scope>

                      </dependency>

                      <dependency>

                          <groupId>org.jboss.shrinkwrap.descriptors</groupId>

                          <artifactId>shrinkwrap-descriptors-impl</artifactId>

                          <version>${version.shrinkwrap.descriptors}</version>

                          <scope>test</scope>

                      </dependency>

                      <dependency>

                          <groupId>org.jboss.shrinkwrap.resolver</groupId>

                          <artifactId>shrinkwrap-resolver-api</artifactId>

                          <version>${version.shrinkwrap}</version>

                          <scope>test</scope>

                      </dependency>

                      <dependency>

                          <groupId>org.jboss.shrinkwrap.resolver</groupId>

                          <artifactId>shrinkwrap-resolver-api-maven</artifactId>

                          <version>${version.shrinkwrap}</version>

                          <scope>test</scope>

                      </dependency>

                      <dependency>

                          <groupId>org.jboss.shrinkwrap.resolver</groupId>

                          <artifactId>shrinkwrap-resolver-impl-maven</artifactId>

                          <version>${version.shrinkwrap}</version>

                          <scope>test</scope>

                      </dependency>

                      <!-- Arquillian Drone Dependencies -->

                      <dependency>

                          <groupId>org.jboss.arquillian.extension</groupId>

                          <artifactId>arquillian-drone-webdriver-depchain</artifactId>

                          <version>${version.arquillian.drone}</version>

                          <type>pom</type>

                          <scope>test</scope>

                      </dependency>   

                      <dependency>

                          <groupId>org.apache.httpcomponents</groupId>

                          <artifactId>httpclient</artifactId>

                          <version>4.2</version>

                          <scope>test</scope>

                      </dependency>

      I've already upgraded to the latest version of arquillian drone (which uses the latest selenium webdriver 2.4). Here's my arquillian.xml

       

      <arquillian xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

            xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian-1.0.xsd">

        <container qualifier="tomcat" default="true">

          <configuration>     

            <property name="catalinaHome">target/container/apache-tomcat-7</property>

            <property name="user">arquillian</property>

            <property name="pass">arquillian</property>

           

            <property name="javaVmArguments">-Xmx2048m -XX:MaxPermSize=512m</property>

          </configuration>

        </container>

       

        <extension qualifier="webdriver">

          <property name="implementationClass">org.openqa.selenium.chrome.ChromeDriver</property>

        </extension>

      </arquillian>

       

      Finally here's my unit test class:

       

      @RunWith(Arquillian.class)

      public class SimpleTest {

          @Drone

          WebDriver browser;

         

          @ArquillianResource

          URL deploymentURL;

         

          @Deployment

          public static WebArchive getDeployment() {

              WebArchive war = DeploymentUtil.getBasicWar();

              return war;

          }

         

          /**

           * Tests a simple histogram. i.e. single word query.

           */

          @Test

          @RunAsClient

          public void testSimple() {

              UserAuthenticationUtil.loginAndCloseHelpWindow(browser, deploymentURL, "user", "pass");

             

              Actions actionsBuilder = new Actions(browser);

              WebElement canvas = browser.findElement(By.id("someDiv"));

              actionsBuilder.moveToElement(canvas, 23, 23);

              actionsBuilder.build().perform();

             

              UserAuthenticationUtil.logout(browser, deploymentURL);

          }

      }

       

      I've already searched a lot of forum replies about this problem, but none of them has helped me so far.  Any ideas how I can fix this?

       

      It seems that Arquillian is still connecting to ChromeDriver even after it has already shut it down.