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
} }
@saikrishna321 Is it possible parallel execution in iOS devices?
@sanoj27 yeah you can run parallel tests on iOS real devices ..
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)
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
Check here www.appiumforbeginners.com89 for Appium Grid concept
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.
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
Hi @ravikr42
Sorry for late reply , pls share your email id .
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(); } }
}
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
Refer to https://discuss.appium.io/t/unable-to-start-appium-service-by-appiumdriverlocalserivce/6324/26
I could get android emulator nodes registered successfully with Selenium grid hub through java programme.
Will share complete project in few weeks.
Regards,
Vikram
@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
-
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
-
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
-
assigning test cases/ classes to available nodes at run time instead of hard coded currently
-
in case a nodes goes down, reassign its test cases/classes to another node/s
-
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
You can watch this video : https://youtu.be/vXpskMkytD8178
@VikramVI can you guide me how to proceed with appium grid ? currently i am not getting any solution to it