Search in sources :

Example 1 with IOSDriver

use of io.appium.java_client.ios.IOSDriver in project cerberus-source by cerberustesting.

the class SeleniumServerService method startServer.

@Override
public void startServer(TestCaseExecution tCExecution) throws CerberusException {
    // message used for log purposes
    String logPrefix = "[" + tCExecution.getTest() + " - " + tCExecution.getTestCase() + "] ";
    try {
        LOG.info(logPrefix + "Start Robot Server (Selenium, Appium or Sikuli)");
        /**
         * Set Session
         */
        LOG.debug(logPrefix + "Setting the session.");
        String system = tCExecution.getApplicationObj().getSystem();
        /**
         * Get the parameters that will be used to set the servers
         * (selenium/appium) If timeout has been defined at the execution
         * level, set the selenium & appium wait element with this value,
         * else, take the one from parameter
         */
        Integer cerberus_selenium_pageLoadTimeout, cerberus_selenium_implicitlyWait, cerberus_selenium_setScriptTimeout, cerberus_selenium_wait_element, cerberus_appium_wait_element, cerberus_selenium_action_click_timeout;
        if (!tCExecution.getTimeout().isEmpty()) {
            cerberus_selenium_wait_element = Integer.valueOf(tCExecution.getTimeout());
            cerberus_appium_wait_element = Integer.valueOf(tCExecution.getTimeout());
        } else {
            cerberus_selenium_wait_element = parameterService.getParameterIntegerByKey("cerberus_selenium_wait_element", system, 90000);
            cerberus_appium_wait_element = parameterService.getParameterIntegerByKey("cerberus_appium_wait_element", system, 90000);
        }
        cerberus_selenium_pageLoadTimeout = parameterService.getParameterIntegerByKey("cerberus_selenium_pageLoadTimeout", system, 90000);
        cerberus_selenium_implicitlyWait = parameterService.getParameterIntegerByKey("cerberus_selenium_implicitlyWait", system, 0);
        cerberus_selenium_setScriptTimeout = parameterService.getParameterIntegerByKey("cerberus_selenium_setScriptTimeout", system, 90000);
        cerberus_selenium_action_click_timeout = parameterService.getParameterIntegerByKey("cerberus_selenium_action_click_timeout", system, 90000);
        LOG.debug(logPrefix + "TimeOut defined on session : " + cerberus_selenium_wait_element);
        Session session = new Session();
        session.setCerberus_selenium_implicitlyWait(cerberus_selenium_implicitlyWait);
        session.setCerberus_selenium_pageLoadTimeout(cerberus_selenium_pageLoadTimeout);
        session.setCerberus_selenium_setScriptTimeout(cerberus_selenium_setScriptTimeout);
        session.setCerberus_selenium_wait_element(cerberus_selenium_wait_element);
        session.setCerberus_appium_wait_element(cerberus_appium_wait_element);
        session.setCerberus_selenium_action_click_timeout(cerberus_selenium_action_click_timeout);
        session.setHost(tCExecution.getSeleniumIP());
        session.setHostUser(tCExecution.getSeleniumIPUser());
        session.setHostPassword(tCExecution.getSeleniumIPPassword());
        session.setPort(tCExecution.getPort());
        tCExecution.setSession(session);
        LOG.debug(logPrefix + "Session is set.");
        /**
         * SetUp Capabilities
         */
        LOG.debug(logPrefix + "Set Capabilities");
        DesiredCapabilities caps = this.setCapabilities(tCExecution);
        session.setDesiredCapabilities(caps);
        LOG.debug(logPrefix + "Set Capabilities - retreived");
        /**
         * SetUp Proxy
         */
        String hubUrl = StringUtil.cleanHostURL(SeleniumServerService.getBaseUrl(StringUtil.formatURLCredential(tCExecution.getSession().getHostUser(), tCExecution.getSession().getHostPassword()) + session.getHost(), session.getPort())) + "/wd/hub";
        LOG.debug(logPrefix + "Hub URL :" + hubUrl);
        URL url = new URL(hubUrl);
        HttpCommandExecutor executor = null;
        boolean isProxy = proxyService.useProxy(hubUrl, system);
        if (isProxy) {
            String proxyHost = parameterService.getParameterStringByKey("cerberus_proxy_host", system, DEFAULT_PROXY_HOST);
            int proxyPort = parameterService.getParameterIntegerByKey("cerberus_proxy_port", system, DEFAULT_PROXY_PORT);
            HttpClientBuilder builder = HttpClientBuilder.create();
            HttpHost proxy = new HttpHost(proxyHost, proxyPort);
            builder.setProxy(proxy);
            if (parameterService.getParameterBooleanByKey("cerberus_proxyauthentification_active", system, DEFAULT_PROXYAUTHENT_ACTIVATE)) {
                String proxyUser = parameterService.getParameterStringByKey("cerberus_proxyauthentification_user", system, DEFAULT_PROXYAUTHENT_USER);
                String proxyPassword = parameterService.getParameterStringByKey("cerberus_proxyauthentification_password", system, DEFAULT_PROXYAUTHENT_PASSWORD);
                CredentialsProvider credsProvider = new BasicCredentialsProvider();
                credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort), new UsernamePasswordCredentials(proxyUser, proxyPassword));
                if (url.getUserInfo() != null && !url.getUserInfo().isEmpty()) {
                    credsProvider.setCredentials(new AuthScope(url.getHost(), (url.getPort() > 0 ? url.getPort() : url.getDefaultPort())), new UsernamePasswordCredentials(tCExecution.getSession().getHostUser(), tCExecution.getSession().getHostPassword()));
                }
                builder.setDefaultCredentialsProvider(credsProvider);
            }
            Factory factory = new MyHttpClientFactory(builder);
            executor = new HttpCommandExecutor(new HashMap<String, CommandInfo>(), url, factory);
        }
        /**
         * SetUp Driver
         */
        LOG.debug(logPrefix + "Set Driver");
        WebDriver driver = null;
        AppiumDriver appiumDriver = null;
        if (tCExecution.getApplicationObj().getType().equalsIgnoreCase(Application.TYPE_GUI)) {
            if (caps.getPlatform().is(Platform.ANDROID)) {
                if (executor == null) {
                    appiumDriver = new AndroidDriver(url, caps);
                } else {
                    appiumDriver = new AndroidDriver(executor, caps);
                }
                driver = (WebDriver) appiumDriver;
            } else if (caps.getPlatform().is(Platform.MAC)) {
                if (executor == null) {
                    appiumDriver = new IOSDriver(url, caps);
                } else {
                    appiumDriver = new IOSDriver(executor, caps);
                }
                driver = (WebDriver) appiumDriver;
            } else // Any Other
            {
                if (executor == null) {
                    driver = new RemoteWebDriver(url, caps);
                } else {
                    driver = new RemoteWebDriver(executor, caps);
                }
            }
        } else if (tCExecution.getApplicationObj().getType().equalsIgnoreCase(Application.TYPE_APK)) {
            if (executor == null) {
                appiumDriver = new AndroidDriver(url, caps);
            } else {
                appiumDriver = new AndroidDriver(executor, caps);
            }
            driver = (WebDriver) appiumDriver;
        } else if (tCExecution.getApplicationObj().getType().equalsIgnoreCase(Application.TYPE_IPA)) {
            if (executor == null) {
                appiumDriver = new IOSDriver(url, caps);
            } else {
                appiumDriver = new IOSDriver(executor, caps);
            }
            driver = (WebDriver) appiumDriver;
        } else if (tCExecution.getApplicationObj().getType().equalsIgnoreCase(Application.TYPE_FAT)) {
            /**
             * Check sikuli extension is reachable
             */
            if (!sikuliService.isSikuliServerReachable(session)) {
                MessageGeneral mes = new MessageGeneral(MessageGeneralEnum.VALIDATION_FAILED_SIKULI_COULDNOTCONNECT);
                mes.setDescription(mes.getDescription().replace("%SSIP%", tCExecution.getSeleniumIP()));
                mes.setDescription(mes.getDescription().replace("%SSPORT%", tCExecution.getSeleniumPort()));
                throw new CerberusException(mes);
            }
            /**
             * If CountryEnvParameter IP is set, open the App
             */
            if (!tCExecution.getCountryEnvironmentParameters().getIp().isEmpty()) {
                sikuliService.doSikuliActionOpenApp(session, tCExecution.getCountryEnvironmentParameters().getIp());
            }
        }
        /**
         * Defining the timeout at the driver level. Only in case of not
         * Appium Driver (see
         * https://github.com/vertigo17/Cerberus/issues/754)
         */
        if (driver != null && appiumDriver == null) {
            driver.manage().timeouts().pageLoadTimeout(cerberus_selenium_pageLoadTimeout, TimeUnit.MILLISECONDS);
            driver.manage().timeouts().implicitlyWait(cerberus_selenium_implicitlyWait, TimeUnit.MILLISECONDS);
            driver.manage().timeouts().setScriptTimeout(cerberus_selenium_setScriptTimeout, TimeUnit.MILLISECONDS);
        }
        tCExecution.getSession().setDriver(driver);
        tCExecution.getSession().setAppiumDriver(appiumDriver);
        /**
         * If Gui application, maximize window Get IP of Node in case of
         * remote Server. Maximize does not work for chrome browser We also
         * get the Real UserAgent from the browser.
         */
        if (tCExecution.getApplicationObj().getType().equalsIgnoreCase(Application.TYPE_GUI) && !caps.getPlatform().equals(Platform.ANDROID)) {
            if (!caps.getBrowserName().equals(BrowserType.CHROME)) {
                driver.manage().window().maximize();
            }
            getIPOfNode(tCExecution);
            /**
             * If screenSize is defined, set the size of the screen.
             */
            String targetScreensize = getScreenSizeToUse(tCExecution.getTestCaseObj().getScreenSize(), tCExecution.getScreenSize());
            LOG.debug("Selenium resolution : " + targetScreensize);
            if ((!StringUtil.isNullOrEmpty(targetScreensize)) && targetScreensize.contains("*")) {
                Integer screenWidth = Integer.valueOf(targetScreensize.split("\\*")[0]);
                Integer screenLength = Integer.valueOf(targetScreensize.split("\\*")[1]);
                setScreenSize(driver, screenWidth, screenLength);
                LOG.debug("Selenium resolution Activated : " + screenWidth + "*" + screenLength);
            }
            tCExecution.setScreenSize(getScreenSize(driver));
            tCExecution.setRobotDecli(tCExecution.getRobotDecli().replace("%SCREENSIZE%", tCExecution.getScreenSize()));
            String userAgent = (String) ((JavascriptExecutor) driver).executeScript("return navigator.userAgent;");
            tCExecution.setUserAgent(userAgent);
        }
        tCExecution.getSession().setStarted(true);
    } catch (CerberusException exception) {
        LOG.error(logPrefix + exception.toString(), exception);
        throw new CerberusException(exception.getMessageError());
    } catch (MalformedURLException exception) {
        LOG.error(logPrefix + exception.toString(), exception);
        MessageGeneral mes = new MessageGeneral(MessageGeneralEnum.VALIDATION_FAILED_URL_MALFORMED);
        mes.setDescription(mes.getDescription().replace("%URL%", tCExecution.getSession().getHost() + ":" + tCExecution.getSession().getPort()));
        throw new CerberusException(mes);
    } catch (UnreachableBrowserException exception) {
        LOG.error(logPrefix + exception.toString(), exception);
        MessageGeneral mes = new MessageGeneral(MessageGeneralEnum.VALIDATION_FAILED_SELENIUM_COULDNOTCONNECT);
        mes.setDescription(mes.getDescription().replace("%SSIP%", tCExecution.getSeleniumIP()));
        mes.setDescription(mes.getDescription().replace("%SSPORT%", tCExecution.getSeleniumPort()));
        mes.setDescription(mes.getDescription().replace("%ERROR%", exception.toString()));
        throw new CerberusException(mes);
    } catch (Exception exception) {
        LOG.error(logPrefix + exception.toString(), exception);
        MessageGeneral mes = new MessageGeneral(MessageGeneralEnum.EXECUTION_FA_SELENIUM);
        mes.setDescription(mes.getDescription().replace("%MES%", exception.toString()));
        throw new CerberusException(mes);
    }
}
Also used : WebDriver(org.openqa.selenium.WebDriver) RemoteWebDriver(org.openqa.selenium.remote.RemoteWebDriver) BasicCredentialsProvider(org.apache.http.impl.client.BasicCredentialsProvider) MalformedURLException(java.net.MalformedURLException) HashMap(java.util.HashMap) Factory(org.openqa.selenium.remote.http.HttpClient.Factory) HttpClientBuilder(org.apache.http.impl.client.HttpClientBuilder) AndroidDriver(io.appium.java_client.android.AndroidDriver) URL(java.net.URL) HttpCommandExecutor(org.openqa.selenium.remote.HttpCommandExecutor) IOSDriver(io.appium.java_client.ios.IOSDriver) MessageGeneral(org.cerberus.engine.entity.MessageGeneral) UnreachableBrowserException(org.openqa.selenium.remote.UnreachableBrowserException) HttpHost(org.apache.http.HttpHost) CerberusException(org.cerberus.exception.CerberusException) AppiumDriver(io.appium.java_client.AppiumDriver) RemoteWebDriver(org.openqa.selenium.remote.RemoteWebDriver) DesiredCapabilities(org.openqa.selenium.remote.DesiredCapabilities) BasicCredentialsProvider(org.apache.http.impl.client.BasicCredentialsProvider) CredentialsProvider(org.apache.http.client.CredentialsProvider) Point(org.openqa.selenium.Point) JSONException(org.json.JSONException) CerberusException(org.cerberus.exception.CerberusException) UnreachableBrowserException(org.openqa.selenium.remote.UnreachableBrowserException) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) UsernamePasswordCredentials(org.apache.http.auth.UsernamePasswordCredentials) AuthScope(org.apache.http.auth.AuthScope) Session(org.cerberus.engine.entity.Session)

Example 2 with IOSDriver

use of io.appium.java_client.ios.IOSDriver in project selenium_java by sergueik.

the class AppiumTest method setUp.

@BeforeClass
public void setUp() throws MalformedURLException, InterruptedException {
    DesiredCapabilities capability = DesiredCapabilities.iphone();
    capability.setCapability("appiumVersion", appiumVersion);
    capability.setCapability("deviceName", deviceName);
    capability.setCapability("deviceOrientation", deviceOrientation);
    capability.setCapability("platformVersion", platformVersion);
    capability.setCapability("platformName", platformName);
    capability.setCapability("browserName", browserName);
    IOSDriver driver = new IOSDriver(new URL("http://" + USERNAME + ":" + ACCESS_KEY + "@ondemand.saucelabs.com:80/wd/hub"), capability);
    driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
}
Also used : IOSDriver(io.appium.java_client.ios.IOSDriver) DesiredCapabilities(org.openqa.selenium.remote.DesiredCapabilities) URL(java.net.URL) BeforeClass(org.testng.annotations.BeforeClass)

Example 3 with IOSDriver

use of io.appium.java_client.ios.IOSDriver in project carina by qaprosoft.

the class MobileFactory method create.

@Override
public WebDriver create(String name, Device device, DesiredCapabilities capabilities, String seleniumHost) {
    if (seleniumHost == null) {
        seleniumHost = Configuration.get(Configuration.Parameter.SELENIUM_HOST);
    }
    String driverType = Configuration.getDriverType();
    String mobilePlatformName = Configuration.getPlatform();
    // TODO: refactor code to be able to remove SpecialKeywords.CUSTOM property completely
    // use comparison for custom_capabilities here to localize as possible usage of CUSTOM attribute
    String customCapabilities = Configuration.get(Parameter.CUSTOM_CAPABILITIES);
    if (!customCapabilities.isEmpty()) {
        mobilePlatformName = SpecialKeywords.CUSTOM;
    }
    LOGGER.debug("selenium: " + seleniumHost);
    RemoteWebDriver driver = null;
    if (isCapabilitiesEmpty(capabilities)) {
        capabilities = getCapabilities(name, device);
    }
    try {
        if (driverType.equalsIgnoreCase(SpecialKeywords.MOBILE)) {
            if (mobilePlatformName.toLowerCase().equalsIgnoreCase(SpecialKeywords.ANDROID)) {
                driver = new AndroidDriver<AndroidElement>(new URL(seleniumHost), capabilities);
            } else if (mobilePlatformName.toLowerCase().equalsIgnoreCase(SpecialKeywords.IOS)) {
                driver = new IOSDriver<IOSElement>(new URL(seleniumHost), capabilities);
            } else if (mobilePlatformName.toLowerCase().equalsIgnoreCase(SpecialKeywords.CUSTOM)) {
                // that's a case for custom mobile capabilities like browserstack or saucelabs
                driver = new RemoteWebDriver(new URL(seleniumHost), capabilities);
            } else {
                throw new RuntimeException("Unsupported mobile capabilities for type: " + driverType + " platform: " + mobilePlatformName);
            }
        }
        if (device.isNull()) {
            // TODO: double check that local run with direct appium works fine
            RemoteDevice remoteDevice = getDeviceInfo(seleniumHost, driver.getSessionId().toString());
            // 3rd party solutions like browserstack or saucelabs return not null remoteDevice object. But inside nothing useful
            if (remoteDevice != null && remoteDevice.getName() != null) {
                device = new Device(remoteDevice);
            } else {
                device = new Device(driver.getCapabilities());
            }
            boolean stfEnabled = R.CONFIG.getBoolean(SpecialKeywords.CAPABILITIES + "." + SpecialKeywords.STF_ENABLED);
            if (stfEnabled) {
                device.connectRemote();
            }
            DevicePool.registerDevice(device);
        }
        // will be performed just in case uninstall_related_apps flag marked as true
        device.uninstallRelatedApps();
    } catch (MalformedURLException e) {
        LOGGER.error("Malformed selenium URL! " + e.getMessage(), e);
    }
    if (driver == null) {
        Assert.fail("Unable to initialize driver: " + name + "!");
    }
    return driver;
}
Also used : IOSDriver(io.appium.java_client.ios.IOSDriver) MalformedURLException(java.net.MalformedURLException) RemoteWebDriver(org.openqa.selenium.remote.RemoteWebDriver) RemoteDevice(com.qaprosoft.carina.commons.models.RemoteDevice) Device(com.qaprosoft.carina.core.foundation.webdriver.device.Device) AndroidElement(io.appium.java_client.android.AndroidElement) RemoteDevice(com.qaprosoft.carina.commons.models.RemoteDevice) URL(java.net.URL)

Example 4 with IOSDriver

use of io.appium.java_client.ios.IOSDriver in project java-client by appium.

the class StartingAppLocallyTest method startingIOSAppWithCapabilitiesAndServiseTest.

@Test
public void startingIOSAppWithCapabilitiesAndServiseTest() {
    File appDir = new File("src/test/java/io/appium/java_client");
    File app = new File(appDir, "UICatalog.app.zip");
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone Simulator");
    capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.APPIUM);
    capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
    capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "9.2");
    // sometimes environment has performance problems
    capabilities.setCapability(IOSMobileCapabilityType.LAUNCH_TIMEOUT, 500000);
    AppiumServiceBuilder builder = new AppiumServiceBuilder().withArgument(GeneralServerFlag.SESSION_OVERRIDE).withArgument(GeneralServerFlag.STRICT_CAPS);
    IOSDriver<?> driver = new IOSDriver<>(builder, capabilities);
    try {
        Capabilities caps = driver.getCapabilities();
        assertEquals(true, caps.getCapability(MobileCapabilityType.PLATFORM_NAME).equals(MobilePlatform.IOS));
        assertNotEquals(null, caps.getCapability(MobileCapabilityType.DEVICE_NAME));
    } finally {
        driver.quit();
    }
}
Also used : IOSDriver(io.appium.java_client.ios.IOSDriver) Capabilities(org.openqa.selenium.Capabilities) DesiredCapabilities(org.openqa.selenium.remote.DesiredCapabilities) DesiredCapabilities(org.openqa.selenium.remote.DesiredCapabilities) AppiumServiceBuilder(io.appium.java_client.service.local.AppiumServiceBuilder) File(java.io.File) Test(org.junit.Test)

Example 5 with IOSDriver

use of io.appium.java_client.ios.IOSDriver in project java-client by appium.

the class StartingAppLocallyTest method startingIOSAppWithCapabilitiesOnlyTest.

@Test
public void startingIOSAppWithCapabilitiesOnlyTest() {
    File appDir = new File("src/test/java/io/appium/java_client");
    File app = new File(appDir, "UICatalog.app.zip");
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "9.2");
    // sometimes environment has performance problems
    capabilities.setCapability(IOSMobileCapabilityType.LAUNCH_TIMEOUT, 500000);
    capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone Simulator");
    capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
    capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.APPIUM);
    IOSDriver<?> driver = new IOSDriver<>(capabilities);
    try {
        Capabilities caps = driver.getCapabilities();
        assertEquals(true, caps.getCapability(MobileCapabilityType.AUTOMATION_NAME).equals(AutomationName.APPIUM));
        assertEquals(true, caps.getCapability(MobileCapabilityType.PLATFORM_NAME).equals(MobilePlatform.IOS));
        assertNotEquals(null, caps.getCapability(MobileCapabilityType.DEVICE_NAME));
        assertEquals(true, caps.getCapability(MobileCapabilityType.PLATFORM_VERSION).equals("9.2"));
        assertEquals(true, caps.getCapability(MobileCapabilityType.APP).equals(app.getAbsolutePath()));
    } finally {
        driver.quit();
    }
}
Also used : IOSDriver(io.appium.java_client.ios.IOSDriver) Capabilities(org.openqa.selenium.Capabilities) DesiredCapabilities(org.openqa.selenium.remote.DesiredCapabilities) DesiredCapabilities(org.openqa.selenium.remote.DesiredCapabilities) File(java.io.File) Test(org.junit.Test)

Aggregations

IOSDriver (io.appium.java_client.ios.IOSDriver)9 DesiredCapabilities (org.openqa.selenium.remote.DesiredCapabilities)7 URL (java.net.URL)5 MalformedURLException (java.net.MalformedURLException)4 AndroidDriver (io.appium.java_client.android.AndroidDriver)3 File (java.io.File)3 Test (org.junit.Test)3 Capabilities (org.openqa.selenium.Capabilities)3 AppiumServiceBuilder (io.appium.java_client.service.local.AppiumServiceBuilder)2 RemoteWebDriver (org.openqa.selenium.remote.RemoteWebDriver)2 RemoteDevice (com.qaprosoft.carina.commons.models.RemoteDevice)1 Device (com.qaprosoft.carina.core.foundation.webdriver.device.Device)1 AppiumDriver (io.appium.java_client.AppiumDriver)1 MobileElement (io.appium.java_client.MobileElement)1 AndroidElement (io.appium.java_client.android.AndroidElement)1 AndroidStartScreenRecordingOptions (io.appium.java_client.android.AndroidStartScreenRecordingOptions)1 IOSStartScreenRecordingOptions (io.appium.java_client.ios.IOSStartScreenRecordingOptions)1 IOException (java.io.IOException)1 HashMap (java.util.HashMap)1 HttpHost (org.apache.http.HttpHost)1