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 "
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
Please provide the full stack trace.
@Hassan_Radi its full stack trace in command prompt
@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 xplain "load the same file using Appium .exe application" what you mean and how to achievwe
@Hassan_Radi'
Thanks a lot, my silly mistake has wasted your time, path in json was to be "jars" instead of "jar" :smpersevere:
@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");
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)
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 @sabarinathan,
Do you have any error message? Can you provide appium logs?