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();
}
}
}