Nodes are registered to hub.
Json file:
{
"capabilities":
[
{
"browserName": "Android",
"version": "4.4.2",
"maxInstances": 5,
"platform": "ANDROID",
"deviceName": "3204da2a5075c0b5"
}
],
"configuration":
{
"nodeTimeout":120,
"cleanUpCycle":2000,
"timeout":2000000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url":"http://127.0.0.1:4723/wd/hub",
"maxSession": 20,
"port": 4723,
"host": "127.0.0.1",
"register": true,
"registerCycle": 5000,
"hub": "127.0.0.1:4441/grid/register",
"hubPort": 4441,
"hubHost": "localhost"
}
}
I have mentioned the device ids in XML:
<?xml version="1.0" encoding="UTF-8"?>
And referring those in script as
****class delaration******
@Parameters(value={"device_id"})
@BeforeSuite//The annotated method will be run before all tests in this suite have run.
public static WebDriver atStart(@Optional ("2636b827a05e6bb3") String device_id) throws InterruptedException, IOException
{
//setup property with webdriver to create/cutomize a session with webdriver
DesiredCapabilities capabilities = new DesiredCapabilities();
System.out.println(""+device_id);
if ("36C35E3F00B8B341".equals(device_id))
{
try
{
writer = new FileWriter("..\\Avaamoo\\DataFile\\avaamoMessagePerformanceResults.csv");
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} // windows machine
writer.write("Network Type");
writer.write(',');
writer.write("File Type");
writer.write(',');
writer.write("File Size");
writer.write(",");
writer.write("Total Time Taken to send file (in MS)");
writer.write(",");
writer.write('\n');
//Load the excel file to fetch data
try
{
importData();
}
catch (Exception e)
{
e.printStackTrace();
}
File app = new File(applicationPath);
capabilities.setCapability("automationName", "Appium");
capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android");
//samsung-sm_n750-3204da2a5075c0b5//micromax-micromax_a311-8a2d363//samsung-nexus_s-30345C56DC2000EC
capabilities.setCapability("deviceName", "3204da2a5075c0b5");
capabilities.setCapability("platformVersion", "4.4.2");//Or//capabilities.setCapability(CapabilityType.VERSION, "4.1.2");
capabilities.setCapability(CapabilityType.PLATFORM, "WINDOWS");
capabilities.setCapability("platformName", "ANDROID");//Or//capabilities.setCapability(CapabilityType.PLATFORM, "Android");
capabilities.setCapability("app", app.getAbsolutePath());
capabilities.setCapability("appPackage", "com.avaamo.android.staging"); //Replace with your app's package
capabilities.setCapability("appActivity", "com.avaamo.android.ui.LandingActivity"); //Replace with app's Activity
//setting new command timeout for selenium server
capabilities.setCapability("newCommandTimeout", "2000000");//33.33 mins
}
Problem is: The value referred from the xml is null in the script hence I have to mention one device id explicitly for @Optional parameter. Then script executes on one device only.
If value for @optional parameter is removed, it says "org.openqa.selenium.SessionNotCreatedException: A new session could not be created. (Original error: The following desired capabilities are required, but were not provided: deviceName) (WARNING: The server did not provide any stacktrace information)"
I have provided the Device name in script as well as in json files too.
I want to run the script on all attached nodes.
@Hassan_Radi @Appium_Master Please suggest.