package com.thoughtworks.webanalyticsautomation.scriptrunner.helper;
import com.thoughtworks.webanalyticsautomation.common.BROWSER;
import com.thoughtworks.webanalyticsautomation.common.Utils;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.remote.MobileCapabilityType;
import io.appium.java_client.service.local.AppiumDriverLocalService;
import io.appium.java_client.service.local.AppiumServiceBuilder;
import org.apache.log4j.Logger;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
/**
* Created by gshilpa on 8/25/16.
*/
public class MobileDriverScriptRunnerHelper extends ScriptRunnerHelper{
private AppiumDriverLocalService service;
private AppiumServiceBuilder serBuilder;
private AndroidDriver<MobileElement> driverAndroid;
FileInputStream input;
Properties prop=new Properties();
public MobileDriverScriptRunnerHelper(Logger logger, BROWSER browser, String baseURL) {
super(logger,browser, baseURL);
}
@Override
public void startDriver() {
}
private void instantiateChromeDriver(DesiredCapabilities capabilities) {
driverAndroid =new AndroidDriver<>(service.getUrl(), capabilities);
driverAndroid.get(BASE_URL);
}
@Override
public void startDriverUsingProxy(Proxy proxy) {
String mobilePropertyFilePath = Utils.getAbsolutePath(new String[] {"resources","mobileSetUp.properties"});
try {
input= new FileInputStream(mobilePropertyFilePath);
prop.load(input);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
logger.info("Initializing the appium server at port 7000");
serBuilder=new AppiumServiceBuilder().withAppiumJS(new File("/usr/local/lib/node_modules/appium/build/lib/main.js")).usingPort(7000);
service = serBuilder.build();
service.start();
if (service == null || !service.isRunning()) {
throw new RuntimeException("Unable to start Appium node server");
}
DesiredCapabilities capabilities = new DesiredCapabilities();
if(browser.equals(BROWSER.chrome))
{
capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, prop.getProperty("BROWSER_NAME"));
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, prop.getProperty("DEVICE_NAME"));
capabilities.setCapability(MobileCapabilityType.ACCEPT_SSL_CERTS, true);
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("ignore-certificate-errors");
capabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
capabilities.setCapability(AndroidMobileCapabilityType.AVD_LAUNCH_TIMEOUT, 500000);
capabilities.setCapability(CapabilityType.PROXY, proxy);
instantiateChromeDriver(capabilities);
}
logger.info ("Mobile Driver started: " + browser.name());
logger.info ("Page title: " + driverAndroid.getTitle());
}
@Override
public void stopDriver() {
if(null !=this.driverAndroid)
driverAndroid.quit();
}
@Override
public Object getDriverInstance() {
if (null == driverAndroid) {
logger.info("Driver is null");
}
return driverAndroid;
}
}