Hi,
How can we create single framework base class for both iOS and Android.
I have tried doing it, but getting an error as :
FAILED CONFIGURATION: @BeforeTest before
java.lang.NoClassDefFoundError: org/openqa/selenium/remote/ProtocolHandshake
at io.appium.java_client.AppiumDriver.(AppiumDriver.java:93)
at io.appium.java_client.ios.IOSDriver.(IOSDriver.java:95)
at utilities.SetUp.setUp(SetUp.java:64)
Request you to please help on urgent basis. Thanks in advance
Code:
package utilities;
import java.io.FileInputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import org.openqa.selenium.remote.DesiredCapabilities;
import com.experitest.appium.SeeTestClient;
import Config.Config;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.DriverMobileCommand;
import io.appium.java_client.MobileDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;
import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.remote.AutomationName;
import io.appium.java_client.remote.IOSMobileCapabilityType;
import io.appium.java_client.remote.MobileCapabilityType;
public class SetUp {
public AppiumDriver driver;
DesiredCapabilities dc = new DesiredCapabilities();
Properties prop,conf;
public String PLATFORM;
public AppiumDriver getDriver() {
if (driver == null) {
try {
return setUp();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
return null;
}
public AppiumDriver setUp() throws MalformedURLException {
setCapability();
if(PLATFORM.equalsIgnoreCase(“Android”)) {
dc.setCapability(“platform”, “Android”);
dc.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, conf.getProperty(“APP_PACKAGE”));
dc.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, conf.getProperty(“APP_ACTIVITY”));
driver = new AndroidDriver(new URL("http://localhost:4723/wd/hub"), dc);
}
else {
dc.setCapability(“platform”, “iOS”);
//dc.setCapability(IOSMobileCapabilityType.BUNDLE_ID, conf.getProperty(“BUNDLE_ID”));
dc.setCapability(MobileCapabilityType.DEVICE_NAME, conf.getProperty(“Device_Name”));
dc.setCapability(MobileCapabilityType.PLATFORM, conf.getProperty(“PLATFORM”));
dc.setCapability(MobileCapabilityType.PLATFORM_VERSION, conf.getProperty(“PLATFORM_VERSION”));
dc.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.IOS_XCUI_TEST);
dc.setCapability(MobileCapabilityType.APP, conf.getProperty(“APP”));
dc.setCapability(“noReset”, true);
driver = new IOSDriver<MobileElement>(new URL("[http://localhost:4723/wd/hub"),](http://localhost:4723/wd/hub) dc);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
driver.setLogLevel(Level.INFO);
return driver;
}
public void setCapability() {
Config config = new Config();
conf = config.getConfig();
PLATFORM = conf.getProperty(“PLATFORM”);
dc.setCapability(“reportDirectory”, conf.getProperty(“reportDirectory”));
dc.setCapability(“reportFormat”, conf.getProperty(“reportFormat”));
dc.setCapability(“testName”, conf.getProperty(“testName”));
dc.setCapability(MobileCapabilityType.UDID, conf.getProperty(“UDID”));
dc.setCapability(“instrumentApp”, true);
}
public Properties loadPropertyFile() {
prop = new Properties();
try {
FileInputStream fis;
if (PLATFORM.equalsIgnoreCase(“Android”))
fis = new FileInputStream(
“/Users/ishika/Documents/Manu-MobileAutomation/ManchesterMobileAutomation/src/main/java/properties/English_Android.properties”);
else
fis = new FileInputStream(
“/Users/ishika/Documents/Manu-MobileAutomation/ManchesterMobileAutomation/src/main/java/properties/English_Ios.properties”);
prop.load(fis);
} catch (Exception e) {
System.out.println(“Property file Missing!!!”);
}
return prop;
}
public Properties getPropertyFile() {
if (prop == null)
prop = loadPropertyFile();
return prop;
}
}