package com.thoughtworks.webanalyticsautomation.samples;
import com.thoughtworks.webanalyticsautomation.Controller;
import com.thoughtworks.webanalyticsautomation.Engine;
import com.thoughtworks.webanalyticsautomation.Result;
import com.thoughtworks.webanalyticsautomation.Status;
import com.thoughtworks.webanalyticsautomation.common.BROWSER;
import com.thoughtworks.webanalyticsautomation.common.TestBase;
import com.thoughtworks.webanalyticsautomation.common.Utils;
import com.thoughtworks.webanalyticsautomation.inputdata.InputFileType;
import com.thoughtworks.webanalyticsautomation.plugins.WebAnalyticTool;
import com.thoughtworks.webanalyticsautomation.scriptrunner.helper.MobileDriverScriptRunnerHelper;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.MobileElement;
import org.apache.log4j.Logger;
import org.openqa.selenium.Proxy;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.io.IOException;
import java.util.ArrayList;
import static com.thoughtworks.webanalyticsautomation.Controller.getInstance;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
/**
* Created by gshilpa on 8/25/16.
*/
public class VerifyWebAnalyticsForAndroid extends TestBase{
protected static AndroidDriver<MobileElement> driverAndroid;
private Logger logger = Logger.getLogger(getClass());
private Engine engine;
private WebAnalyticTool webAnalyticTool = WebAnalyticTool.PROXY;
private InputFileType inputFileType = InputFileType.XML;
private boolean keepLoadedFileInMemory = true;
private String log4jPropertiesAbsoluteFilePath = Utils.getAbsolutePath(new String[] {"resources","log4j.properties"});
private String inputDataFileName = Utils.getAbsolutePath(new String[] {"src", "test", "sampledata", "MobileTestData.xml"});
private String actionName = "OpenWAATArticleOnBlog_Proxy";
private MobileDriverScriptRunnerHelper mobileDriverScirptRunnerHelper;
@BeforeMethod
public void setup () throws IOException {
Controller.reset();
}
@Test
public void captureVerifyAnalyticsDataForAndroidMobile()
{
String baseURL = "https://www.thoughtworks.com";
String navigateToURL = baseURL + "/mingle/signup/";
ArrayList<String> urlPatterns = new ArrayList<String>();
urlPatterns.add("https://www.google-analytics.com/");
int minimumNumberOfPackets = 1;
engine = getInstance(webAnalyticTool, inputFileType, keepLoadedFileInMemory, log4jPropertiesAbsoluteFilePath);
Proxy mobileProxy=(Proxy) engine.getAppiumBasedProxyPlugin();
startMobileDriver(BROWSER.chrome, baseURL, mobileProxy);
logger.info("********************************************Start capture********************************************");
engine.enableWebAnalyticsTesting(actionName);
logger.info("********************************************Do action********************************************");
driverAndroid.get(navigateToURL);
try {
Thread.sleep(10000);
logger.info("Waiting for application to load");
} catch (InterruptedException e) {
logger.error(e.getMessage());
}
logger.info("********************************************Verify result********************************************");
Result verificationResult = engine.verifyWebAnalyticsData(inputDataFileName, actionName, urlPatterns, minimumNumberOfPackets);
logger.info("********************************************Verification pattern should not be null********************************************");
assertNotNull(verificationResult.getVerificationStatus(), "Verification status should NOT be NULL");
logger.info("********************************************Failure details should NOT be NULL********************************************");
assertNotNull(verificationResult.getListOfErrors(), "Failure details should NOT be NULL");
logVerificationErrors(verificationResult);
logger.info("********************************************Verification status should be PASS********************************************");
assertEquals(verificationResult.getVerificationStatus(), Status.PASS, "Verification status should be PASS");
logger.info("********************************************Failure details should be empty********************************************");
assertEquals(verificationResult.getListOfErrors().size(), 0, "Failure details should be empty");
}
private void startMobileDriver(BROWSER browser, String baseURL, Proxy mobileProxy) {
mobileDriverScirptRunnerHelper = new MobileDriverScriptRunnerHelper(logger, browser, baseURL);
mobileDriverScirptRunnerHelper.startDriverUsingProxy(mobileProxy);
driverAndroid = (AndroidDriver<MobileElement>) mobileDriverScirptRunnerHelper.getDriverInstance();
}
@AfterMethod
public void tearDown() throws Exception {
if (engine!=null) {
engine.disableWebAnalyticsTesting();
}
if (mobileDriverScirptRunnerHelper!=null) {
mobileDriverScirptRunnerHelper.stopDriver();
}
}
}