首頁  >  文章  >  Java  >  基於SPRING的APPIUM配置應用詳細介紹

基於SPRING的APPIUM配置應用詳細介紹

高洛峰
高洛峰原創
2017-03-19 11:16:381895瀏覽

本文主要是講述,使用Spring框架,優化Appium的Driver調用,並將寫在程式碼裡的大量設定參數定義到設定檔當中,還可靈活的控制呼叫AndroidDriver還是IOSDriver。

Spring的環境,請自行搭建。

下面的用例是基於spring4.3,appium java client 4.1.2, selenium 3.0.1

首先,我們寫一個Driver,定義一些Bean屬性,這些屬性都和創建AndroidDriver ,IOSDriver相關:

package test;

import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.openqa.selenium.remote.DesiredCapabilities;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.ios.IOSDriver;

@Component
@Scope("prototype")
public class Driver {

    private List> capabilityList;
    private DesiredCapabilities capabilities;
    private URL url;
    private AndroidDriver androidDriver;
    private IOSDriver iOSDriver;

    public List> getCapabilityList() {
        return capabilityList;
    }

    public void setCapabilityList(List> capabilityList) {
        this.capabilityList = capabilityList;
    }

    public DesiredCapabilities getCapabilities() {
        return capabilities;
    }

    public void setCapabilities(DesiredCapabilities capabilities) {
        this.capabilities = capabilities;
    }

    public URL getUrl() {
        return url;
    }

    public void setUrl(URL url) {
        this.url = url;
    }

    public AndroidDriver getAndroidDriver() {
        return androidDriver;
    }

    public void setAndroidDriver(AndroidDriver androidDriver) {
        this.androidDriver = androidDriver;
    }

    public IOSDriver getiOSDriver() {
        return iOSDriver;
    }

    public void setiOSDriver(IOSDriver iOSDriver) {
        this.iOSDriver = iOSDriver;
    }

}

然後我們建立一個DriverAdaptor,用來初始化和關閉Driver

package test;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.openqa.selenium.remote.DesiredCapabilities;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.ios.IOSDriver;

@Component
public class DriverAdaptor {

    private AndroidDriver androidDriver = null;
    private IOSDriver iOSDriver = null;

    @Resource
    private Driver driver;

    public Driver getDriver() {
        return driver;
    }

    public void setDriver(Driver driver) {
        this.driver = driver;
    }

    @Resource
    ApplicationContext ctx;

    @Value("#{baseconfig.environment}")
    String environment;

    @SuppressWarnings("unchecked")
    public void initAndroidDriverByConfigFile() throws Exception {
        for (ArrayList arg : (List>) ctx.getBean(environment)) {
            ctx.getBean("capabilities", DesiredCapabilities.class).setCapability(arg.get(0), arg.get(1));
        }
        androidDriver = new AndroidDriver<>(driver.getUrl(), driver.getCapabilities());
        driver.setAndroidDriver(androidDriver);
    }

    public void quitAndoridSession() {
        if (androidDriver != null)
            androidDriver.quit();
    }

    @SuppressWarnings("unchecked")
    public void initIOSDriverByConfigFile() throws Exception {
        for (ArrayList arg : (List>) ctx.getBean(environment)) {
            ctx.getBean("capabilities", DesiredCapabilities.class).setCapability(arg.get(0), arg.get(1));
        }
        iOSDriver = new IOSDriver<>(driver.getUrl(), driver.getCapabilities());
        driver.setiOSDriver(iOSDriver);
    }

    public void quitIOSService() {
        if (iOSDriver != null)
            iOSDriver.quit();
    }

}

接著,我們把Spring的設定檔寫一下:




    
    
    
    

    
    
    
    
    
    
        
            platformName
            #{android.platformName}
        
        
            deviceName
            #{android.deviceName}
        
        
            platformVersion
            #{android.platformVersion}
        
        
            appPackage
            #{android.appPackage}
        
        
            appActivity
            #{android.appActivity}
        
    
    
    
        
            platformName
            #{ios.platformName}
        
        
            deviceName
            #{ios.deviceName}
        
        
            automationName
            #{ios.automationName}
        
        
            platformVersion
            #{ios.platformVersion}
        
        
            app
            #{ios.app}
        
    
    
    
        
    
    
    
        
        
        
    

在這個在設定檔中,我們定義了兩個.properties,分別用來存放Android,IOS的相關配置

第三個配置文件,透過

e589a5cbd5a225a84b6486834674c2abdde4123f2ed5a21d0bae333af89830f9

來取得載入哪個設定檔

 

.properties設定檔如下:

android.properties 這裡面我們模擬調起微信

#APPium Android Driver
platformName:Android
deviceName:HUAWEIP8
platformVersion:6.0
# wechat
appPackage:com.tencent.mm
appActivity:.ui.LauncherUI

ios.properties .app的路徑請自己配一下

#APPium IOS Driver
platformName:iOS
deviceName:iPhone Simulator
automationName:XCUITest
platformVersion:10.2
app:/X/X/X.app

baseconfig.properties

environment:androidCapabilityList
# Driver url
url:http://127.0.0.1:4723/wd/hub

最後寫一個測試類別看一下能不能調起微信

package test;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;

public class TestDemo {

    static ApplicationContext ctx;
    static AndroidDriver driver;
    static DriverAdaptor driverAdaptor;

    @Before
    public void before() throws Exception {
        ctx = new ClassPathXmlApplicationContext("spring.xml");
        driverAdaptor = ctx.getBean("driverAdaptor", DriverAdaptor.class);
        driverAdaptor.initAndroidDriverByConfigFile();
    }

    @After
    public void after() throws Exception {
        if (driverAdaptor != null)
            driverAdaptor.quitAndoridSession();
    }

    @Test
    public void test1() throws InterruptedException {
        Thread.sleep(5000);
    }

}

測試方法裡面只寫了個延遲,如果微信能調起來,表示流程上是成功的。

以上是基於SPRING的APPIUM配置應用詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn