This site is in read only mode. Please continue to browse, but replying, likes, and other actions are disabled for now.
141 / 169
Nov 2015

@tovaibhav1

These two lines are the ones causing the issue. You are using invalid double quotes, thus the inability to parse the json file. Please use this site to validate your json file: http://jsonlint.com/25

Change every to be "

Thanks @Hassan_Radi but I used command from location "C:\Program Files (x86)\Appium\node_modules\appium\bin>"

node appium -a 192.168.1.2 -p 4723 --nodeconfig D:\TehnologyWork\Softwares\jar\node1.json

I am receiving error

C:\Program Files (x86)\Appium\node_modules\appium\bin>node appium -a 192.168.1.2 -p 4723 --nodeconfig D:\TehnologyWork\Softwares\jar\node1.json

info: Welcome to Appium v1.4.13 (REV c75d8adcb66a75818a542fe1891a34260c21f76a)
info: Appium REST http interface listener started on 192.168.1.2:4723
info: [debug] Non-default server args: {"address":"192.168.1.2","nodeconfig":"D:\TehnologyWork\Softwares\jar\node1.json"}
info: Console LogLevel: debug
> error: Unable to load node configuration file to register with grid

@tovaibhav1
I am not sure what is causing this weird issue, but if I were you, I would try to load the same file using Appium .exe application and see how it would react. This would tell me if it is a problem with the file itself or the parameters I am passing.

@Hassan_Radi Please guide

My node are:
node1.json

{
"capabilities": [
{
"browserName": "Android",
"version": "5.1",
"maxInstances": 3,
"platform": "ANDROID",
"deviceName": "X1033"
}
],
"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
}
}

node2.json

{
"capabilities": [
{
"browserName": "Android",
"version": "5.1.1",
"maxInstances": 3,
"platform": "ANDROID",
"deviceName": "emulator_1"
}
],
"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
}
}

Started HUB

java -jar selenium-server-standalone-2.48.2.jar -role hub

Started Nodes

node appium -a 127.0.0.1 -p 4723 --nodeconfig D:\TehnologyWork\Softwares\jars\node1.json

node appium -a 127.0.0.1 -p 4728 --nodeconfig D:\TehnologyWork\Softwares\jars\node2.json

When I execute test for any device, always script runs in one appium server which is started firstly i.e. node1.

public static ThreadLocal> dr = new ThreadLocal>();

@BeforeMethod
@Parameters("deviceName")
public void beforeMethod(String deviceName) throws MalformedURLException{
	try{
		if(deviceName.equals("XT1033")){
			AndroidDriver<MobileElement>  driver = null;
			DesiredCapabilities capabilities=new DesiredCapabilities();
			capabilities.setCapability("platformName", "Android");
			capabilities.setCapability("platformVersion","5.1");
			capabilities.setCapability("deviceName", deviceName);
			capabilities.setCapability("app",System.getProperty("user.dir") + "/resources/app-Channel31-debug.apk");
			URL serverAddress = new URL("http://127.0.0.1:4444/wd/hub");
			driver = new AndroidDriver<MobileElement>(serverAddress, capabilities);
			setDriver(driver);

		}
		if(deviceName.equals("emulator_1")){
			AndroidDriver<MobileElement>  driver = null;
			DesiredCapabilities capabilities=new DesiredCapabilities();
			capabilities.setCapability("platformName", "Android");
			capabilities.setCapability("platformVersion","5.1.1");
			capabilities.setCapability("deviceName", deviceName);
			capabilities.setCapability("app",System.getProperty("user.dir") + "/resources/american swan- prod.apk");
			URL serverAddress = new URL("http://127.0.0.1:4444/wd/hub");
			driver = new AndroidDriver<MobileElement>(serverAddress, capabilities);
			setDriver(driver);
		}
	}

Hi @tovaibhav1,
you are trying to select the node with deviceName, but the hub does not use this capability.
The hub only reads browserName, version, platform and applicationName. The other capabilities (deviceName, platformVersion, platformName, ...) are Appium capabilities, not used by the hub.

In this case, you could add version capability to each test:

capabilities.setCapability("version","5.1");
capabilities.setCapability("version","5.1.1");
2 months later

I can see there are some success using appium grid over Selenium but is there one person that managed to do this using windows (without emulator!) simply** two Android devices**?

Hello all,

I'm trying to have some mobile automated tests running with appium and selenium grid. Once i done all configuration stuff and added grid nodes, how do i run my tests parallely in both devices?

Here's my setUp():

desired_caps = {}
	desired_caps['platformName'] = 'Android'
	desired_caps['platformVersion'] = '5.1'
	desired_caps['deviceName'] = ''
	desired_caps['app'] = os.path.abspath(os.path.join(os.path.dirname(__file__), 'C:/Users/andre.mendes/Desktop/workspace/powerpro/apps/powerpro.apk'))
	desired_caps['appPackage'] = 'com.psafe.powerpro'
	desired_caps['appActivity'] = '.MainActivity'
	desired_caps['noReset'] = False
	self.driver = webdriver.Remote('http://127.0.0.1:4444/wd/hub', desired_caps)
	self.driver.implicitly_wait(15)

What it supposed to be in deviceName in this case?

If i leave it blank, here's what i got:

C:\Users\andre.mendes\Desktop\workspace\powerpro>java -jar selenium-server-standalone-2.44.0.jar -role hub

19:16:58.691 INFO - Launching a selenium grid server

2016-02-18 19:16:59.937:INFO:osjs.Server:jetty-7.x.y-SNAPSHOT

2016-02-18 19:16:59.968:INFO:osjsh.ContextHandler:startedo.s.j.s.ServletContextHandler{/,null}2016-02-18 19:16:59.995:INFO:osjs.AbstractConnector:StartedSocketConnector@0.0.0.0:4444

19:49:48.183 INFO - Got a request to create a new session: Capabilities[{app=C:\Users\andre.mendes\Desktop\workspace\powerpro\apps\powerpro.apk, appPackage=com.psafe.powerpro, appActivity=.MainActivity, noReset=true, platformVersion=5.1, platformName=Android, deviceName=}]

19:49:48.183 INFO - Available nodes: [host :http://127.0.0.1:4723, host :http://127.0.0.1:4733]

 19:49:48.183 INFO - Trying to create a new session on node host :http://127.0.0.1:4723

19:49:48.183 INFO - Trying to create a new session on test slot {newCommandTimeout=30, browserName=Android, maxInstances=1, version=5.1,deviceName=0429058934,deviceReadyTimeout=5, platform=ANDROID}

I only can run the first node registered in grid. In this case http://127.0.0.1:47231.

I even tried to create a script with two setup(), each one to each device, but even this way, tests only ran in this same device (http://127.0.0.1:4723)

12 days later

I have started working on running parallel android devices by using grid.My Problem is the app installed and opened both connected devices properly.but it has not typed any values which i have given. After that it shows error message in setup method.
Can anyone help me for this issue????

Hi rgonalo,
I have been facing some issues in Appium Grid. The hub has connected to the node properly.I have connected two devices for testing.The App has installed both devices and then stopped working.Herewith I have attached the code for reference.Please Specify me where the problem is.

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;

public class AppiumGrid {

 private AndroidDriver driver = null;
 public String appionlicatPath = "E:/sample.apk";
 public String MobileDevice_1 ="D1";
 public String MobileDevice_2 ="D2";
 public static  DesiredCapabilities capabilities = new DesiredCapabilities(); 
 AppiumDriver d1,d2;

 @BeforeTest
 
 @Parameters("Device_ID")

 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");
           }
  
  
  driver =  new AndroidDriver(new URL("http://127.0.0.1:4444/wd/hub"),capabilities);
  driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS);
  
  
 }

 

    @Test()
    public void loginTest() throws InterruptedException{
    	
    	Thread.sleep(1000);
    	
    	{
         System.out.println("Driver"+driver);

         String app_package_name = "sample/id";
         
        By userId = By.id(app_package_name + "username");

   
   By password = By.id(app_package_name + "password");

   

   

   driver.findElement(userId).sendKeys("***********************");
   driver.findElement(password).sendKeys("****************);
   driver.findElement(login_Button).click(); 
   
  
    	}
  
    }
    
 public void setcapabilities(String apppath,String device,String automation){
  
  DesiredCapabilities capabilities1= new DesiredCapabilities();

  capabilities1.setCapability("deviceName","G000H404540508AB");	
  capabilities1.setCapability("platformVersion", "5.1.1");	           	  
  capabilities1.setCapability("udid", "G000H404540508AB");
   capabilities1.setCapability("appActivity", "com.entappia.mhhs");
   
  try {
   d1 = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities1);
  } catch (MalformedURLException e) {
   // TODO Auto-generated catch block
   System.out.println("Not able to start application");
   e.printStackTrace();
  }
  d1.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
  
  
  DesiredCapabilities capabilities2= new DesiredCapabilities();
  //capabilities2.setCapability(CapabilityType.BROWSER_NAME, "Android");
  capabilities2.setCapability("deviceName","G000H4045405088W");
  //capabilities2.setCapability(CapabilityType.VERSION, "5.1.1");
  capabilities2.setCapability("platformVersion", "5.1");
  //capabilities2.setCapability(CapabilityType.PLATFORM, "ANDROID");
  capabilities2.setCapability("udid", "G000H4045405088W");
  
  
  try {
   d2= new AndroidDriver(new URL("http://127.0.0.1:4725/wd/hub"), capabilities2);
  } catch (MalformedURLException e) {
   // TODO Auto-generated catch block
   System.out.println("Not able to start application");
   e.printStackTrace();
  }
  
  
  d2.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

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

Hi,

I have attached an appium log as u mentioned

I have started two appium server simultaneously. both appium servers run as above image.

The first device installs the app and stopped opening. The second device does not install app . and eclipse shows error as session not created exception