This site is in read only mode. Please continue to browse, but replying, likes, and other actions are disabled for now.
121 / 137
Aug 2016
12 days later

Hi,

can you please suggest us how can we make sure two appium server start for parallel device execution with out using selenium grid
looking for u r reply

Thanks in advance

chari.

20 days later

@bhaskar

my selenium grid is running but when i try to run node server by "node appium --nodeconfig /Users/RajShekhar_DiroLabs/Desktop/node1.json -p 4730 -bp 4730"

its shows me logs like
Appium] Welcome to Appium v1.5.2
[Appium] Non-default server args:
[Appium] port: 4730
[Appium] bootstrapPort: 4730
[Appium] nodeconfig: '/Users/RajShekhar_DiroLabs/Desktop/node1.json'
[Appium] Unable to load node configuration file to register with grid: ENOENT: no such file or directory, open '/Users/RajShekhar_DiroLabs/Desktop/node1.json'
[Appium] Appium REST http interface listener started on 0.0.0.0:4730

but shows Unable to load node configuration file to register with grid: ENOENT: no such file or directory, open '/Users/RajShekhar_DiroLabs/Desktop/node1.json'

Can any one please suggest me how to load node with selenium grid
json file
{
"capabilities":
[ {
"browserName":
"Android", "version":"5.0.1",
"maxInstances": 3,
"platform":"ANDROID",
"deviceName":"FCAZGU007688H3D" } ],
"configuration":
{
"nodeTimeout":120, "port":4730, "hubPort":4444,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url":"http://127.0.0.1:4730/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
} }

hello,

During start node server it shows a error "Syntax error in node configuration file: Unexpected token P"

srikantas-Mac-mini-3:bin RajShekhar_DiroLabs$ appium --nodeconfig /Users/RajShekhar_DiroLabs/Desktop/node1.json -p 4730
[Appium] Welcome to Appium v1.5.2
[Appium] Non-default server args:
[Appium] port: 4730
[Appium] nodeconfig: '/Users/RajShekhar_DiroLabs/Desktop/node1.json'
[Appium] Error: Syntax error in node configuration file: Unexpected token P
at Object.wrappedLogger.errorAndThrow (lib/logger.js:60:13)
at postRequest$ (lib/grid-register.js:42:12)

Can any one please suggest me how to resolve it

I am able to run appium tests on two different devices but they run one after the other. I want them to run on both the devices simultaneously(parallel). I am running appium on two different ports.This is how I am doing it.
appium -p 4725 -bp 4735 -U "706b9496" --chromedriver-port 9518
appium -p 4735 -bp 4745 -U "ZX1B34JFZK" --chromedriver-port 9528

Can anyone help me how to do it?

Hello,

Can any one please help me ,
My nodes are working on hub but when i run my script it shows on hub
13:16:06.657 INFO - Available nodes: [http://0.0.0.0:4725]
13:16:06.657 INFO - Trying to create a new session on node http://0.0.0.0:4725
13:16:06.657 INFO - Trying to create a new session on test slot {maxInstance=1, browserName=Android, version=5.0 .2 , platform=ANDROID}

but in node shows error missing plateformName and shows version name blank i can not recognize that node picking desired capabilities from where
[HTTP] --> POST /wd/hub/session {"desiredCapabilities":{"browserName":"android","version":"","platform":"ANDROID"}}
[MJSONWP] Calling AppiumDriver.createSession() with args: [{"browserName":"android","version":"","platform":"ANDROID"},null,null,null,null,null,null,null,null,null,null,null,null,null]
[MJSONWP] Encountered internal error running command: Error: You must include a platformName capability
at AppiumDriver.getDriverForCaps (lib/appium.js:40:13)
at AppiumDriver.createSession$ (lib/appium.js:91:28)

12 days later

With 1.5 new features says, you can start multiple sessions in 1 server. Or did i understand badly?

At the moment I'm using 2 emulators in paralel with selenium grid. It works fine but I have to open a new appium server for all emulators I need. So if I want to run with 20 different device emulators, I need to launch 20 appium server, which is not cool. My configuration is like this;

appium -a 172.20.0.196 -p 4723 --session-override --nodeconfig appiumnodeconfig1.json
appium -a 172.20.0.196 -p 4724 --session-override --nodeconfig appiumnodeconfig2.json

appiumnodeconfig1.json:
{
"capabilities": [
{
"browserName": "android",
"version": "5.1",
"platform": "ANDROID",
"maxInstances": 1,
"deviceName": "192.168.56.101:5555"
}
],
"configuration": {
"nodeTimeout" : 120,
"port": 4723,
"hubPort": 4444,
"url": "http://172.20.0.196:4723/wd/hub",
"hub": "172.20.0.196:4444/grid/register",
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"hubHost": "172.20.0.196",
"nodePolling": 2000,
"registerCycle": 10000,
"register": true,
"cleanUpCycle": 2000,
"timeout": 30000,
"maxSession": 1
}
}

appiumnodeconfig2.json:
{
"capabilities": [
{
"browserName": "android",
"version": "5.1",
"platform": "ANDROID",
"maxInstances": 1,
"deviceName": "192.168.56.102:5555"
}
],
"configuration": {
"nodeTimeout" : 120,
"port": 4724,
"hubPort": 4444,
"url": "http://172.20.0.196:4724/wd/hub",
"hub": "172.20.0.196:4444/grid/register",
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"hubHost": "172.20.0.196",
"nodePolling": 2000,
"registerCycle": 10000,
"register": true,
"cleanUpCycle": 2000,
"timeout": 30000,
"maxSession": 1
}
}

The thing is, I want to start only 1 appium server and connect multiple emulators to it. Can I do it and how?
Thanks in advance

Thank you but it doesn't answer my question. Tutorials on the website shows exactly the same configuration with mine. You have to open a server for every node.

But I already got the answer from Jonathan Lipps yesterday. He told me that 1.5 work was the groundwork for that new feature, but the feature itself is not released. I guess we're going to have to wait unfortunately.

24 days later

Yes you can run by use parallel thread concepts with out use selenium grid

Hi @pushpank

Can you please share the steps to run appium script parallel without using selenium grid infrastructure.

Thanks
Ravi Kumar

Hi @bhaskar,

After doing everything as I found in the discussions, I was able to launch android app in multiple devices in parallel. But after that, only one device was able to finish the rest of the automation, other devices got stuck right after launching app.

P.S.: I was able to launch apps using session overriding, otherwise I was not able to launch apps in parallel even though different servers were running.

Thanks,
Minar

9 days later

You can use parallel thread .
First you have to run appium server then auto connect android device ,
write code parallel thread to run multi android devices .
Tommorow i will share u sample code .

Thanks & Regards
Pushpank kaushik

1 month later

hi puspank,

Can i have the sample code,even my app is also getting hang after launch in one of the devices

13 days later

I tried this, with Appium 1.5.3 and java client 1.4.1, it works but not consistently. I saw lot of instruments error.

Another point is I had to Synchronise lot of my methods that made parallel execution slow.

15 days later
8 days later

Hello..
I have successfully configure the setup for parallel execution but while executing the demo it is running in one device...

Try with specifying two different test tags by using TestNG xml file and provide udids for the capabilities too.
Use Grid concept as well.

Need help on Selenium Grid: I am trying executes script on different mobile emulators but i can't succeed . I have tried different tutorials but unable to succeed.

@TuHuynh: Tried but doesn't work. Other script are runnung fine. I have use following procedure
1)Started Hub
2)Started Node
3)try to execute script

Let me know if i am missing anything

I am trying demo example:
Code 1:- CalcExample .java

package example;
import java.io.File;
import libs.BaseTest;
import org.openqa.selenium.By;
public class CalcExample extends BaseTest{

public CalcExample(){
}

public CalcExample(int deviceNum) {
    super(deviceNum);
}

public void performOperations() {

    try
    {
        driver.findElement(By.id("com.android2.calculator3:id/cling_dismiss")).click();
        driver.findElement(By.id("com.android2.calculator3:id/digit5")).click();
        driver.findElement(By.id("com.android2.calculator3:id/plus")).click();
        driver.findElement(By.id("com.android2.calculator3:id/digit9")).click();
        driver.findElement(By.id("com.android2.calculator3:id/equal")).click();
        String num = driver.findElement(By.xpath("//android.widget.EditText[@index=0]")).getText();
        System.out.println("Result : "+num);
        driver.closeApp();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

public void run(){
    File app = new File("C:\\AndroidCalculator.apk");
    String appPath = app.getAbsolutePath();
    createDriver(appPath); // create devices
    performOperations(); // user function
}

public static void main(String[] args) {
    // Create object
    CalcExample calc = new CalcExample();
    calc.execute();
}

}

Code 2:-

package libs;
import libs.DeviceConfiguration;
import io.appium.java_client.android.AndroidDriver;
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
public class BaseTest implements Runnable{
public AndroidDriver driver;
protected BaseTest[] deviceThreads;
protected int numOfDevices;
protected String deviceId;
protected String deviceName;
protected String osVersion;
protected String port;
protected Thread t;
protected int deviceCount;

AppiumManager appiumMan = new AppiumManager();
static Map<String, String> devices = new HashMap<String, String>();
static DeviceConfiguration deviceConf = new DeviceConfiguration();

public BaseTest(){
    try {
        devices = deviceConf.getDivces();
        deviceCount = devices.size()/3;
    }catch (Exception e) {
        e.printStackTrace();
    }
}

public BaseTest(int i){
    int deviceNumber = (i+1);
    this.deviceId = devices.get("deviceID"+deviceNumber);
    this.deviceName = devices.get("deviceName"+deviceNumber);
    this.osVersion = devices.get("osVersion"+deviceNumber);
}

public void createDriver(){
    try    {
        port = appiumMan.startAppium();             // Start appium server              

        // create appium driver instance
        DesiredCapabilities capabilities = DesiredCapabilities.android();
        capabilities.setCapability("deviceName", deviceName);
        capabilities.setCapability("platformName", "android");
        capabilities.setCapability(CapabilityType.VERSION, osVersion);
        capabilities.setCapability(CapabilityType.BROWSER_NAME, "chrome");
        capabilities.setCapability("udid", deviceId);

        this.driver = new AndroidDriver(new URL("http://127.0.0.1:"+port+"/wd/hub"),capabilities);
    }
    catch(Exception e){
        e.printStackTrace();
    }
}

public void createDriver(String appPath){
    try    {
        port = appiumMan.startAppium();             // Start appium server              

        // create appium driver instance
        DesiredCapabilities capabilities = DesiredCapabilities.android();
        capabilities.setCapability("deviceName", deviceName);
        capabilities.setCapability("platformName", "android");
        capabilities.setCapability(CapabilityType.VERSION, osVersion);
        capabilities.setCapability("app", appPath);
        capabilities.setCapability("udid", deviceId);

        this.driver = new AndroidDriver(new URL("http://127.0.0.1:"+port+"/wd/hub"),capabilities);
    }
    catch(Exception e){
        e.printStackTrace();
    }
}

public void destroyDriver()
{
    driver.quit();
    try {
        deviceConf.stopADB();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
public void start(){
    if (t == null){
      t = new Thread(this);
      t.start ();
    }
}

public void run(){
}

public  <c> void execute()
{
    Class<?> c;
    try {
        int startMethod = 0;
        String className = this.getClass().toString();
        System.out.println("class : "+className);
        className = className.replace("class ", "");
        System.out.println("class : "+className);
        // Get extended class name
        c = Class.forName(className);
        System.out.println("class : "+c);

        // Get start method
        Method[] m = c.getMethods();
        System.out.println("methods: "+m.length);
        for(int i=0;i<m.length;i++)    {
            //System.out.println("methods: "+m[i]);
            if(m[i].toString().contains("start")){
                startMethod=i;
                break;
            }
        }
        System.out.println("methods: "+m[startMethod]);
        // get constructor
        Constructor<?> cons = c.getConstructor(Integer.TYPE);
        System.out.println("cons: "+cons);

        System.out.println("deviceCount: "+deviceCount);
        // Create array of objects
        Object obj =  Array.newInstance(c, deviceCount);
        for (int i = 0; i < deviceCount; i++) {
            Object val = cons.newInstance(i);
            Array.set(obj, i, val);
        }

        for (int i = 0; i < deviceCount; i++) {
            Object val = Array.get(obj, i);
            m[startMethod].invoke(val);
        }

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

}

1 month later

Hi

I am new to this topic , if any mistake pls lead me to the correct way!

I am using IDE as android studio for appium and I am using TestNG for parallel execution,

While creating class how do a can create testngclasses in android studio and the xml file for exacting the rest parallel

Once I created the same with option in android studio

But second time the option is not appearing for tesstng class creation

Pls help....

Thank you

"the xml file for exacting the rest parallel" this statement is " the xml file for executing the test parallely" ..by mistake it is typed like "the xml file for exacting the rest parallel"

14 days later
7 months later

@bhaskar @pushpank @Sumona @Arvind_Patel1 I’m trying to setup Appium parallel run with Selenium grid setup and facing below issues, please clarify how did you solve those

  1. Single Test class having multiple test cases, how do you pass same instance of driver across test cases ? In my case there are failures as random drivers are used to execute set of test cases on particular device

  2. multiple test cases across multiple test class, again same problem same driver is not used for same device. driver keeps on changing

how do you make sure one driver is used for one device only ?

Thanks & Regards,
Vikram

For those who are still struggling with appium parallel execution, you can refer to below github repo

some more issues which I need to find answer

  1. assigning test cases/ classes to available nodes at run time instead of hard coded currently

  2. in case a nodes goes down, reassign its test cases/classes to another node/s

  3. flexible parallel ( compatibility testing ) & distributed run ( quick regression ) , currently this part is also hard coded.

In case you’ve answers to these, please update here.

Thanks,
Vikram

1 month later

Hi !! This is for multiple emulators right ? so how do we test in multiple devices ?

1 month later
9 months later

@VikramVI can you guide me how to proceed with appium grid ? currently i am not getting any solution to it