Connecting appium server to selenium grid for android

Hi,

I am trying to run two scripts on different mobile(Nexus and Samsung).

I have 2 nodeconfig.json files each having the config of devices. I am starting 2 appium servers with different node config specified in general settings. When i check the grid console i see that both the devices are appearing as Node.

In testng.xml i have specified different tests. When they are executed sequentially all the scripts are executed on a single mobile even though desired capabilities mentioned in the test script are different.

I am currently using :
appium: 1.2.0.0
OS windows
Android devices: Nexus and Samsung
Device OS: 5.0 and 4.3

Please let me know if i am missing any thing which is making the script to run on same device even though the desired capabilities mentioned are different in each test script.

JSON:

File 1:
{
“capabilities”:
[
{
“browserName”: “chrome”,
“version”: “4.3”,
“maxInstances”: 1,
“platform”: “ANDROID”,
“deviceName”: “m0”
}
],
“configuration”:
{
“nodeTimeout”:120,
“port”:4723,
“hubPort”:4444,
“proxy”: “org.openqa.grid.selenium.proxy.DefaultRemoteProxy”,
“url”:“http://127.0.0.1:4723/wd/hub”,
“hub”: “127.0.0.1:4444/grid/register”,
“hubHost”:“127.0.0.1”,
“nodePolling”:2000,
“registerCycle”:10000,
“register”:true,
“cleanUpCycle”:2000,
“timeout”:30000,
“maxSession”:1
}
}

File 2:
{
“capabilities”:
[
{
“browserName”: “chrome”,
“version”: “5.0”,
“maxInstances”: 1,
“platform”: “ANDROID”,
“deviceName”: “hammerhead”
}
],
“configuration”:
{
“nodeTimeout”:120,
“port”:4728,
“hubPort”:4444,
“proxy”: “org.openqa.grid.selenium.proxy.DefaultRemoteProxy”,
“url”:“http://127.0.0.1:4728/wd/hub”,
“hub”: “127.0.0.1:4444/grid/register”,
“hubHost”:“127.0.0.1”,
“nodePolling”:2000,
“registerCycle”:10000,
“register”:true,
“cleanUpCycle”:2000,
“timeout”:30000,
“maxSession”:1
}
}

I have attached the test scripts and testng.xml info.txt (7.3 KB) for reference. Any help would be appriciated.

Thanks and regards,
M.Karthik

@Hassan_Radi, @Arvind_Patel,

Any suggestions on this?

Thanks and regards,
M.Karthik

Hi All,

Configuration to run test parallel on multiple device:

Prerequisite: 1. Start selenium grid on 127.0.0.1
2. Register multiple appium node on grid with different port

XML file:

suite name=“Logintestsuite:” parallel=“tests” thread-count=“5” verbose="1

test name=“firstTest on fiest mobile”
parameter name=“DeviceID” value=“TA9asdsda33071OQ”
classes
class
name=“package.testfilename”
classes
test
test name="firstTest on second mobile "
parameter name=“DeviceID” value=“AN45577”
classes
class
name=“package.testfilename”
classes
test
suite

<> </> syntex removed

Test File:

package arvind;

public class LoginTest{

public String appionlicatPath = "//....apk";

public String emulator_device_1 ="emulator-5554";
public String emulator_device_2 ="emulator-5556";
public String MobileDevice_1 ="D1";
public String MobileDevice_2 ="D2";
public static  DesiredCapabilities capabilities = new DesiredCapabilities(); 

	

@Parameters("DeviceID")
@BeforeTest
public void startAppium(String DeviceID) throws MalformedURLException, InterruptedException{
	
	if(DeviceID.equalsIgnoreCase("mobile1")){
		setcapabilities(appionlicatPath, MobileDevice_1,"Appium");
	         }
	
	if(DeviceID.equalsIgnoreCase("mobile2")){
		setcapabilities(appionlicatPath, MobileDevice_2,"Appium");
	         }
	
	if(DeviceID.equalsIgnoreCase("first")){
		setcapabilities(appionlicatPath, emulator_device_1,"Appium");
	         }
		
	if(DeviceID.equalsIgnoreCase("second")){
		setcapabilities(appionlicatPath, emulator_device_1,"Appium");
	         }
	if(DeviceID.equalsIgnoreCase("chrome")){
		setChromeCapabilities(emulator_device_1,"Appium");
	         }
	
	
	
	driver =  new AndroidDriver(new URL("http://127.0.0.1:4444/wd/hub"),capabilities);
	driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS);
	
	
}

@ AfterTest(alwaysRun= true)
public void tearDown(){
	driver.quit();
}

   @Test()
   public void loginTest() throws InterruptedException{
 Thread.sleep(10000L);
   homepage.loginButton();
   registerpage.login("[email protected]", "abcd");
   Assert.assertTrue("User not loggedIn", homepage.isTestPresent("Log Out"));	


public void setcapabilities(String apppath,String device,String automation){
	File app = new File(apppath); 
	capabilities.setCapability("deviceName", device);
	capabilities.setCapability("automationName",automation);
	capabilities.setCapability("appium-version", "1.2.2");
	capabilities.setCapability("platformName", "Android");
	capabilities.setCapability("platformVersion", "4.4.2");			
        capabilities.setCapability("app", app.getAbsolutePath());
    
}

hope this is helpful for appium grid setup.
Question welcomed :smile:

Hi @Arvind_Patel,

I tried below mentioned steps:

1)Launch grid at localhost:4444
2)Launch appium with nodeConfig.json and start it i.e. appium started at 127.0.0.1:4723
3)Launch appium with nodeConfig1.json and start it i.e. appium started at 127.0.0.1:4728

Prepare testng.xml as shown below:

suite name=“Suite” parallel=“tests” thread-count=“5” verbose=“1”
test name=“Test1”
parameter name=“Device_ID” value=“085d3b920c928938”
classes
class name=“Test.ZoomPinch”
classes
test
test name=“Test2”
parameter name=“Device_ID” value=“4df70d325d884031”
classes
class name=“Test.Calculator”
classes
test
suite

Have beforemethod parametarized:

@Parameters (“Device_ID”)
@BeforeMethod
public void setUp(String device)throws MalformedURLException {
System.out.println(device);
switch(device)
{
case “4df70d325d884031”:
capabilities = new DesiredCapabilities();
//capabilities.setCapability(CapabilityType.BROWSER_NAME, “Android”);
//capabilities.setCapability(“deviceName”, “Default”);
capabilities.setCapability(CapabilityType.VERSION, “4.3”);
capabilities.setCapability(“browserName”, “chrome”);
//capabilities.setCapability(CapabilityType.PLATFORM, “Android”);
capabilities.setCapability(“deviceName”, “m0”);
capabilities.setCapability(“platformName”, “Android”);
//capabilities.setCapability(capabilityName, value)
//capabilities.setCapability(“appPackage”, “com.google.android.apps.maps”);
//capabilities.setCapability(“appActivity”, “com.google.android.maps.MapsActivity”);
break;
default: System.out.println(“no mob exists…”);
break;
}
//driver= new AppiumDriver(new URL(“http://127.0.0.1:4723/wd/hub”), cap); // (you can get it from
// apk info app)

                    driver   = new AppiumDriver(new URL("http://localhost:4444/wd/hub"), capabilities);
}

@Parameters(“Device_ID”)
@BeforeMethod
public void setup(String device)throws Exception
{
switch(device)
{
case “085d3b920c928938”:
capabilities = new DesiredCapabilities();
//capabilities.setCapability(CapabilityType.BROWSER_NAME, “”);
//capabilities.setCapability(“browserName”, “Chrome”);
capabilities.setCapability(CapabilityType.VERSION, “5.0”);
capabilities.setCapability(“deviceName”, “hammerhead”);
capabilities.setCapability(“platformName”, “Android”);
capabilities.setCapability(“appPackage”, “com.davemorrissey.labs.subscaleview.sample”);
capabilities.setCapability(“appActivity”, “com.davemorrissey.labs.subscaleview.sample.MainActivity”);
break;
default:System.out.println(“no mob…exists”);
break;
}
driver= new AppiumDriver(new URL(“http://127.0.0.1:4723/wd/hub”), capabilities);

      //driver = new AppiumDriver(new URL("http://localhost:4444/wd/hub"), capabilities);
}

When executed, out of 2 tests 1 of them fail…
when only Test2 is executed, even though device id is mentioned it is getting executed on another device.

Please suggest what needs to be done…

Thanks and regards,
M.Karthik

Hi @karthik_holla,

You are launching the second test directly on the first appium server (port 4723):

You must use the hub url:

driver = new AppiumDriver(new URL("http://localhost:4444/wd/hub"), capabilities);

And the hub will redirect your test to the properly appium server depending on “browserName”, “version” and “platform” capabilities.

2 Likes

@rgonalo sorry…my mistake…thank you for correcting me… :slight_smile: will try this and verify…

@rgonalo @Arvind_Patel ,

i tried again it didnt work. Everything will execute in a single device i.e nexus 5 irrespective of parallel or sequential

Below are the test cases,testng.xml and config files:

public class Calculator {

DesiredCapabilities capabilities;
  AppiumDriver driver;

@Parameters ("Device_ID") 
@BeforeMethod
public void setUp(String device)throws MalformedURLException {
	System.out.println(Thread.currentThread().getId());
	switch(device)
	{
	case "4df70d325d884031":
                 			capabilities = new DesiredCapabilities();
                 			//capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android");
                 			//capabilities.setCapability("deviceName", "Default");
                 			capabilities.setCapability(CapabilityType.VERSION, "4.3");
                 			capabilities.setCapability("browserName", "chrome");
                 			//capabilities.setCapability(CapabilityType.PLATFORM, "Android");
                 			capabilities.setCapability("deviceName", "m0");
                 			capabilities.setCapability("platformName", "Android");
                 			//capabilities.setCapability(capabilityName, value)
                 			//capabilities.setCapability("appPackage", "com.google.android.apps.maps");
                 			//capabilities.setCapability("appActivity", "com.google.android.maps.MapsActivity");
                 			break;
	default: System.out.println("nim thatha kottidara ee config du mobile???");
			 break;
	}
              //driver= new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), cap);                                                                                                                                  // (you can get it from
                                                                                                                                                                                                              // apk info app)
                        
                    driver   = new AppiumDriver(new URL("http://localhost:4444/wd/hub"), capabilities);
}
@Test
public void verifyCalculator() throws InterruptedException
{
	driver.get("http://www.google.com");
	Thread.sleep(10000);
	System.out.println("launched...");
	System.out.println(driver.getSessionId());
    }

@AfterMethod
public void destroy()
{
driver.close();
//driver.quit();
}
}


public class ZoomPinch
{
static DesiredCapabilities capabilities;
static AppiumDriver driver;
static WebDriverWait wait;

@Parameters("Device_ID")
 @BeforeMethod
 public void setup(String device)throws Exception 
{
	System.out.println(Thread.currentThread().getId());
	switch(device)
	{
	case "085d3b920c928938":
	  capabilities = new DesiredCapabilities();
      //capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
       //capabilities.setCapability("browserName", "Chrome");
      capabilities.setCapability(CapabilityType.VERSION, "5.0");
      capabilities.setCapability("deviceName", "hammerhead");
      capabilities.setCapability("platformName", "Android");
      capabilities.setCapability("appPackage", "com.davemorrissey.labs.subscaleview.sample");
      capabilities.setCapability("appActivity", "com.davemorrissey.labs.subscaleview.sample.MainActivity");
      break;
	default:System.out.println("nim thatha kottidara ee config du mobile???");
	 		break;
	}
	 driver= new AppiumDriver(new URL("http://localhost:4444/wd/hub"), capabilities); 
      
      //driver = new AppiumDriver(new URL("http://localhost:4444/wd/hub"), capabilities);
}
 @Test
 public void zoom() throws MalformedURLException
 { 
	 System.out.println(driver.getSessionId());
	 
      try {
		Thread.sleep(4000);
	} catch (InterruptedException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
      driver.findElementById("com.davemorrissey.labs.subscaleview.sample:id/basicFeatures").click();
      //android.view.View
      CommonFunctionLibrary cobj=new CommonFunctionLibrary(driver);
      cobj.zoomOnElement(cobj,"id", "com.davemorrissey.labs.subscaleview.sample:id/imageView");
      cobj.pinchOnElement(cobj,"id", "com.davemorrissey.labs.subscaleview.sample:id/imageView");
 }
 @AfterMethod
 public void tearDown()
 {
	 driver.quit();
 }

}


testng.xml:

xml version=“1.0” encoding=“UTF-8”
DOCTYPE suite SYSTEM “http://testng.org/testng-1.0.dtd
suite name=“Suite” parallel=“none”
test name=“Test1”
parameter name=“Device_ID” value=“085d3b920c928938”
classes
class name=“Test.ZoomPinch”
classes
test
test name=“Test2”
parameter name=“Device_ID” value=“4df70d325d884031”
classes
class name=“Test.Calculator”
classes
test
suite


Json Config:

{
“capabilities”:
[
{
“browserName”: “chrome”,
“version”: “5.0”,
“maxInstances”: 1,
“platform”: “ANDROID”,
“deviceName”: “hammerhead”
}
],
“configuration”:
{
“nodeTimeout”:120,
“port”:4728,
“hubPort”:4444,
“proxy”: “org.openqa.grid.selenium.proxy.DefaultRemoteProxy”,
“url”:“http://127.0.0.1:4728/wd/hub”,
“hub”: “127.0.0.1:4444/grid/register”,
“hubHost”:“127.0.0.1”,
“nodePolling”:2000,
“registerCycle”:10000,
“register”:true,
“cleanUpCycle”:2000,
“timeout”:30000,
“maxSession”:1
}
}

{
“capabilities”:
[
{
“browserName”: “chrome”,
“version”: “4.3”,
“maxInstances”: 1,
“platform”: “ANDROID”,
“deviceName”: “m0”
}
],
“configuration”:
{
“nodeTimeout”:120,
“port”:4723,
“hubPort”:4444,
“proxy”: “org.openqa.grid.selenium.proxy.DefaultRemoteProxy”,
“url”:“http://127.0.0.1:4723/wd/hub”,
“hub”: “127.0.0.1:4444/grid/register”,
“hubHost”:“127.0.0.1”,
“nodePolling”:2000,
“registerCycle”:10000,
“register”:true,
“cleanUpCycle”:2000,
“timeout”:30000,
“maxSession”:1
}
}

Please help . not sure whats going wrong… :frowning:

You must set the device id when starting the Appium server (parameter --udid) or creating the driver (capability udid). Without this configuration, the Appium server executes the test in the first device that it finds.

In your example, you can add the capability with:

capabilities.setCapability("udid", device);

Or launch both Appium servers with --udid:

node . --nodeconfig nodeConfig.json -p 4723 --udid 4df70d325d884031
node . --nodeconfig nodeConfig1.json -p 4728 --udid 085d3b920c928938

Appium doc: http://appium.io/slate/en/master/?ruby#running-your-tests-with-appium

2 Likes

@rgonalo thanks for your guidance…it worked… :smile:

@rgonalo @Hassan_Radi @Arvind_Patel,

I am trying to run the my test cases parallel on 3 devices connected to my machine

I am trying to launch the same test cases for different devices using the method described below.
[Launching and stopping appium server programatically][1].

Please can you guide me on how to launch appium server programmatically using node config.json.

  1. I launching grid through command prompt: java -jar selenium-server-standalone.jar -role hub
  2. I am executing the below code to launch appium server with nodeconfig.json

Below is the Code which i am trying to execute:

package Test;

import io.appium.java_client.AppiumDriver;

import java.io.IOException;
import java.net.URL;

import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecuteResultHandler;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.ExecuteException;
import org.apache.commons.exec.Executor;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

public class NewTrial
{
public static void main(String[] args) throws ExecuteException, IOException
{
AppiumDriver driver;
DefaultExecuteResultHandler resultHandler;
Executor executor ;
CommandLine command = new CommandLine(“cmd”);
command.addArgument("/c");
command.addArgument(“C:\Users\mkarthik\Documents\selenium\Appium\node.exe”);
command.addArgument(“C:\Users\mkarthik\Documents\selenium\Appium\node_modules\appium\bin\appium.js”);
command.addArgument("–nodeconfig");
command.addArgument(“C:\Users\mkarthik\Documents\nodeconfig.json”);
command.addArgument("–bootstrap-port");
command.addArgument(“4724”);
resultHandler = new DefaultExecuteResultHandler();
executor = new DefaultExecutor();
executor.setExitValue(1);
System.out.println("command: "+command);
executor.execute(command, resultHandler);

	DesiredCapabilities capabilities=new DesiredCapabilities();
	URL url=new URL("http://localhost:4444/wd/hub");
	
	capabilities.setCapability(CapabilityType.VERSION, "5.0");
      capabilities.setCapability("deviceName", "hammerhead");
      capabilities.setCapability("platformName", "Android");
	capabilities.setCapability("udid","085d3b920c928938");
	
	 driver   = new AppiumDriver(url, capabilities);
	 driver.get("http://www.google.com");


}

}

Below is the error i am getting:

command: cmd /c C:\Users\mkarthik\Documents\selenium\Appium\node.exe C:\Users\mkarthik\Documents\selenium\Appium\node_modules\appium\bin\appium.js --nodeconfig C:\Users\mkarthik\Documents\nodeconfig.json --bootstrap-port 4724
log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies).
log4j:WARN Please initialize the log4j system properly.
Exception in thread “main” org.openqa.selenium.WebDriverException: Error forwarding the new session Empty pool of VM for setup Capabilities [{deviceName=hammerhead, platformName=Android, udid=085d3b920c928938, version=5.0}]
Command duration or timeout: 249 milliseconds
Build info: version: ‘2.42.2’, revision: ‘6a6995d’, time: ‘2014-06-03 17:42:30’
System info: host: ‘mkarthik-W7’, ip: ‘192.168.56.1’, os.name: ‘Windows 7’, os.arch: ‘amd64’, os.version: ‘6.1’, java.version: ‘1.7.0_40’
Driver info: io.appium.java_client.AppiumDriver
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:599)
at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:88)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:240)
at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:126)
at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:153)
at io.appium.java_client.AppiumDriver.(AppiumDriver.java:44)
at Test.NewTrial.main(NewTrial.java:57)
Caused by: org.openqa.grid.common.exception.GridException: Error forwarding the new session Empty pool of VM for setup Capabilities [{deviceName=hammerhead, platformName=Android, udid=085d3b920c928938, version=5.0}]
at org.openqa.grid.web.servlet.handler.RequestHandler.process(RequestHandler.java:114)
at org.openqa.grid.web.servlet.DriverServlet.process(DriverServlet.java:83)
at org.openqa.grid.web.servlet.DriverServlet.doPost(DriverServlet.java:67)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.seleniumhq.jetty7.servlet.ServletHolder.handle(ServletHolder.java:565)
at org.seleniumhq.jetty7.servlet.ServletHandler.doHandle(ServletHandler.java:479)
at org.seleniumhq.jetty7.server.session.SessionHandler.doHandle(SessionHandler.java:225)
at org.seleniumhq.jetty7.server.handler.ContextHandler.doHandle(ContextHandler.java:1031)
at org.seleniumhq.jetty7.servlet.ServletHandler.doScope(ServletHandler.java:406)
at org.seleniumhq.jetty7.server.session.SessionHandler.doScope(SessionHandler.java:186)
at org.seleniumhq.jetty7.server.handler.ContextHandler.doScope(ContextHandler.java:965)
at org.seleniumhq.jetty7.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.seleniumhq.jetty7.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)
at org.seleniumhq.jetty7.server.Server.handle(Server.java:349)
at org.seleniumhq.jetty7.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:452)
at org.seleniumhq.jetty7.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:47)
at org.seleniumhq.jetty7.server.AbstractHttpConnection.content(AbstractHttpConnection.java:894)
at org.seleniumhq.jetty7.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:948)
at org.seleniumhq.jetty7.http.HttpParser.parseNext(HttpParser.java:857)
at org.seleniumhq.jetty7.http.HttpParser.parseAvailable(HttpParser.java:235)
at org.seleniumhq.jetty7.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:66)
at org.seleniumhq.jetty7.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:254)
at org.seleniumhq.jetty7.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)
at org.seleniumhq.jetty7.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)
at java.lang.Thread.run(Unknown Source)
e[36minfoe[39m: Welcome to Appium v1.2.0 (REV e53f49c706a25242e66d36685c268b599cc18da5)
e[90mdebuge[39m: Non-default server args: {“nodeconfig”:“C:\Users\mkarthik\Documents\nodeconfig.json”}
e[36minfoe[39m: Appium REST http interface listener started on 0.0.0.0:4723
e[36minfoe[39m: LogLevel: debug
e[90mdebuge[39m: starting auto register thread for grid. Will try to register every 10000 ms.
e[90mdebuge[39m: Appium successfully registered with the grid on 127.0.0.1:4444
e[36minfoe[39m: e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/statuse[39m e[90m{}e[39m
e[90mdebuge[39m: Appium request initiated at /wd/hub/status
e[36minfoe[39m: e[37m<-- GET /wd/hub/status e[39me[32m200e[39me[90m 4.760 ms - 104e[39m e[90m{“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}e[39m
e[90mdebuge[39m: Request received with params: {}
e[90mdebuge[39m: Responding to client with success: {“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}
e[36minfoe[39m: e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/statuse[39m e[90m{}e[39m
e[90mdebuge[39m: Appium request initiated at /wd/hub/status
e[90mdebuge[39m: Request received with params: {}
e[90mdebuge[39m: Responding to client with success: {“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}
e[36minfoe[39m: e[37m<-- GET /wd/hub/status e[39me[32m200e[39me[90m 0.943 ms - 104e[39m e[90m{“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}e[39m
e[36minfoe[39m: e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/statuse[39m e[90m{}e[39m
e[90mdebuge[39m: Appium request initiated at /wd/hub/status
e[90mdebuge[39m: Request received with params: {}
e[90mdebuge[39m: Responding to client with success: {“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}
e[36minfoe[39m: e[37m<-- GET /wd/hub/status e[39me[32m200e[39me[90m 0.712 ms - 104e[39m e[90m{“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}e[39m
e[36minfoe[39m: e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/statuse[39m e[90m{}e[39m
e[90mdebuge[39m: Appium request initiated at /wd/hub/status
e[90mdebuge[39m: Request received with params: {}
e[90mdebuge[39m: Responding to client with success: {“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}
e[36minfoe[39m: e[37m<-- GET /wd/hub/status e[39me[32m200e[39me[90m 0.586 ms - 104e[39m e[90m{“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}e[39m
e[36minfoe[39m: e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/statuse[39m e[90m{}e[39m
e[90mdebuge[39m: Appium request initiated at /wd/hub/status
e[36minfoe[39m: e[37m<-- GET /wd/hub/status e[39me[32m200e[39me[90m 0.581 ms - 104e[39m e[90m{“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}e[39m
e[90mdebuge[39m: Request received with params: {}
e[90mdebuge[39m: Responding to client with success: {“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}
e[36minfoe[39m: e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/statuse[39m e[90m{}e[39m
e[90mdebuge[39m: Appium request initiated at /wd/hub/status
e[36minfoe[39m: e[37m<-- GET /wd/hub/status e[39me[32m200e[39me[90m 0.587 ms - 104e[39m e[90m{“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}e[39m
e[90mdebuge[39m: Request received with params: {}
e[90mdebuge[39m: Responding to client with success: {“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}
e[36minfoe[39m: e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/statuse[39m e[90m{}e[39m
e[90mdebuge[39m: Appium request initiated at /wd/hub/status
e[36minfoe[39m: e[37m<-- GET /wd/hub/status e[39me[32m200e[39me[90m 1.939 ms - 104e[39m e[90m{“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}e[39m
e[90mdebuge[39m: Request received with params: {}
e[90mdebuge[39m: Responding to client with success: {“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}
e[90mdebuge[39m: Appium request initiated at /wd/hub/status
e[36minfoe[39m: e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/statuse[39m e[90m{}e[39m
e[36minfoe[39m: e[37m<-- GET /wd/hub/status e[39me[32m200e[39me[90m 0.532 ms - 104e[39m e[90m{“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}e[39m
e[90mdebuge[39m: Request received with params: {}
e[90mdebuge[39m: Responding to client with success: {“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}
e[36minfoe[39m: e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/statuse[39m e[90m{}e[39m
e[90mdebuge[39m: Appium request initiated at /wd/hub/status
e[36minfoe[39m: e[37m<-- GET /wd/hub/status e[39me[32m200e[39me[90m 1.044 ms - 104e[39m e[90m{“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}e[39m
e[90mdebuge[39m: Request received with params: {}
e[90mdebuge[39m: Responding to client with success: {“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}
e[36minfoe[39m: e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/statuse[39m e[90m{}e[39m
e[90mdebuge[39m: Appium request initiated at /wd/hub/status
e[36minfoe[39m: e[37m<-- GET /wd/hub/status e[39me[32m200e[39me[90m 1.581 ms - 104e[39m e[90m{“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}e[39m
e[90mdebuge[39m: Request received with params: {}
e[90mdebuge[39m: Responding to client with success: {“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}
e[36minfoe[39m: e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/statuse[39m e[90m{}e[39m
e[90mdebuge[39m: Appium request initiated at /wd/hub/status
e[90mdebuge[39m: Request received with params: {}
e[90mdebuge[39m: Responding to client with success: {“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}
e[36minfoe[39m: e[37m<-- GET /wd/hub/status e[39me[32m200e[39me[90m 0.547 ms - 104e[39m e[90m{“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}e[39m
e[36minfoe[39m: e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/statuse[39m e[90m{}e[39m
e[90mdebuge[39m: Appium request initiated at /wd/hub/status
e[36minfoe[39m: e[37m<-- GET /wd/hub/status e[39me[32m200e[39me[90m 1.643 ms - 104e[39m e[90m{“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}e[39m
e[90mdebuge[39m: Request received with params: {}
e[90mdebuge[39m: Responding to client with success: {“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}
e[36minfoe[39m: e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/statuse[39m e[90m{}e[39m
e[90mdebuge[39m: Appium request initiated at /wd/hub/status
e[36minfoe[39m: e[37m<-- GET /wd/hub/status e[39me[32m200e[39me[90m 0.944 ms - 104e[39m e[90m{“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}e[39m
e[90mdebuge[39m: Request received with params: {}
e[90mdebuge[39m: Responding to client with success: {“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}
e[36minfoe[39m: e[37m–>e[39m e[37mGETe[39m e[37m/wd/hub/statuse[39m e[90m{}e[39m
e[36minfoe[39m: e[37m<-- GET /wd/hub/status e[39me[32m200e[39me[90m 1.161 ms - 104e[39m e[90m{“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}e[39m
e[90mdebuge[39m: Appium request initiated at /wd/hub/status
e[90mdebuge[39m: Request received with params: {}
e[90mdebuge[39m: Responding to client with success: {“status”:0,“value”:{“build”:{“version”:“1.2.0”,“revision”:“e53f49c706a25242e66d36685c268b599cc18da5”}}}

Below is the nodeconfig.json

{
“capabilities”:
[
{
“browserName”: “chrome”,
“version”: “5.0”,
“maxInstances”: 1,
“platform”: “ANDROID”,
“deviceName”: “hammerhead”
}
],
“configuration”:
{
“nodeTimeout”:120,
“port”:4728,
“hubPort”:4444,
“proxy”: “org.openqa.grid.selenium.proxy.DefaultRemoteProxy”,
“url”:“http://127.0.0.1:4728/wd/hub”,
“hub”: “127.0.0.1:4444/grid/register”,
“hubHost”:“127.0.0.1”,
“nodePolling”:2000,
“registerCycle”:10000,
“register”:true,
“cleanUpCycle”:2000,
“timeout”:30000,
“maxSession”:1
}
}

Kindly help.

Thanks and regards,
M.Karthik

If running more than one test session on the same machine, you need to make sure to provide different ports for each test. Have you done that???

I just tried with the code which launches grid and appium. Its launching appium server and its registering using nodeconfig.json. I see that the grid console shows the mobile but when AppiumDriver driver = new AppiumDriver(new (“http://local host:4444/wd/hub”),capabilities); is executed its failing…

does it fail with running only on one device??

Yes have only one device connected to test…have attached the error info in my previous post…“error forwarding new session empty pool of vm for setup capabilities” is the error

Hi all,

Any one has any lead on this?

As far as I can see; this is a Grid related issue, please make sure that you are initializing the grid connection successfully. Follow this link for help. Just a small question; Are you running/connecting to a virtual machine??

Hi @Hassan_Radi

I am able to see that appium is registered with the device and it is available as node at hub console…no I am not executing scripts on VM…hub , appium , and device all on local system

hi All,

package Test;

import io.appium.java_client.AppiumDriver;

import java.io.IOException;
import java.net.URL;

import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecuteResultHandler;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.ExecuteException;
import org.apache.commons.exec.Executor;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

public class NewTrial
{
public static void main(String[] args) throws ExecuteException, IOException, InterruptedException
{
AppiumDriver driver;
DefaultExecuteResultHandler resultHandler;
DefaultExecuteResultHandler resultHandler1;
Executor executor1 ;
Executor executor ;

	try{
	CommandLine command1 = new CommandLine("cmd");
	command1.addArgument("/c");
	command1.addArgument("java -jar C:\\Users\\mkarthik\\Downloads\\selenium-server-standalone-2.41.0.jar -role hub");
	resultHandler1 = new DefaultExecuteResultHandler();
	executor1 = new DefaultExecutor();
	executor1.setExitValue(1);
	System.out.println("command: "+command1);
	executor1.execute(command1, resultHandler1);
	
	Thread.sleep(10000);
	
	DesiredCapabilities capabilities=new DesiredCapabilities();
	URL url=new URL("http://localhost:4444/wd/hub");
	
	capabilities.setCapability(CapabilityType.VERSION, "5.0.1");
    capabilities.setCapability("deviceName", "hammerhead");
    capabilities.setCapability("platformName", "Android");
	capabilities.setCapability("udid","085d3b920c928938");
	capabilities.setBrowserName("chrome");
	
	
	Thread.sleep(25000);
	CommandLine command = new CommandLine("cmd");
	command.addArgument("/c");
	command.addArgument("C:\\Users\\mkarthik\\Documents\\selenium\\Appium\\node.exe");
    command.addArgument("C:\\Users\\mkarthik\\Documents\\selenium\\Appium\\node_modules\\appium\\bin\\appium.js");
    command.addArgument("--address");
    command.addArgument("127.0.0.1");
    command.addArgument("--port");
    command.addArgument("4728");
    command.addArgument("--udid");
    command.addArgument("085d3b920c928938");
	//command.addArgument("4724");
	//command.addArgument("--chromedriver-port");
	//command.addArgument("9515");
	command.addArgument("--nodeconfig");
	command.addArgument("C:\\Users\\mkarthik\\Desktop\\trial.json");
    resultHandler = new DefaultExecuteResultHandler();
	executor = new DefaultExecutor();
	executor.setExitValue(1);
	System.out.println("command: "+command);
	executor.execute(command, resultHandler);
	
	Thread.sleep(25000);
	
	 driver   = new AppiumDriver(url, capabilities);
	 driver.get("http://www.google.com");
	}
	catch(Exception e)
	{
		System.out.println(e.getMessage());
	}
	finally{
		
	}

}

}

Above code works fine… :smile:

Thanks and regards,
M.Karthik

Hi Karthik,

According to above comments I can understand you are trying to execute your script on multiple devices parallel.

Were you able to successfully execute the script on multiple devices parallel. If yes please provide the steps.

Thanks
Srikanth

**Hi **

I m new to Appium And I m currently working on parallel execution, I have some doubts from above comments

  1. What is difference in AppiumDriver and RemoteWebDriver?
  2. Which url have to provide in RemoteWebDriver ? is it hub IP with Port or Appium IP with port ?
    3.appium -a http://127.0.01 -port 2734 -udid 903etg763 -bp2734 --nodeconfig “E:\Appium\Nodeconfig.json”
    if i run the above command from cmd . its opening an appium with old IP and port
    which i used. so i want to know is that the same happening to you . To
    configure with hub , manually i m attached the Nodeconfig file in
    Appium (SeleniumGridConfigurationFile).

Kindly help me to solve the issue…