您好,欢迎访问一九零五行业门户网

基于SPRING的APPIUM配置应用详细介绍

本文主要是讲述,使用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<arraylist<string>> capabilitylist; private desiredcapabilities capabilities; private url url; private androiddriver<mobileelement> androiddriver; private iosdriver<mobileelement> iosdriver; public list<arraylist<string>> getcapabilitylist() { return capabilitylist; } public void setcapabilitylist(list<arraylist<string>> 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<mobileelement> getandroiddriver() { return androiddriver; } public void setandroiddriver(androiddriver<mobileelement> androiddriver) { this.androiddriver = androiddriver; } public iosdriver<mobileelement> getiosdriver() { return iosdriver; } public void setiosdriver(iosdriver<mobileelement> 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<mobileelement> androiddriver = null; private iosdriver<mobileelement> 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<string> arg : (list<arraylist<string>>) 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<string> arg : (list<arraylist<string>>) 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的配置文件写一下:
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemalocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"> <!-- 组件扫描 --> <context:component-scan base-package="test"></context:component-scan> <!-- aspect --> <aop:aspectj-autoproxy proxy-target-class="false" /> <!-- 定义配置文件properties --> <util:properties id="android" location="classpath:android.properties" /> <util:properties id="ios" location="classpath:ios.properties" /> <util:properties id="baseconfig" location="classpath:baseconfig.properties" /> <!-- android --> <util:list id="androidcapabilitylist"> <list> <value>platformname</value> <value>#{android.platformname}</value> </list> <list> <value>devicename</value> <value>#{android.devicename}</value> </list> <list> <value>platformversion</value> <value>#{android.platformversion}</value> </list> <list> <value>apppackage</value> <value>#{android.apppackage}</value> </list> <list> <value>appactivity</value> <value>#{android.appactivity}</value> </list> </util:list> <!-- ios --> <util:list id="ioscapabilitylist"> <list> <value>platformname</value> <value>#{ios.platformname}</value> </list> <list> <value>devicename</value> <value>#{ios.devicename}</value> </list> <list> <value>automationname</value> <value>#{ios.automationname}</value> </list> <list> <value>platformversion</value> <value>#{ios.platformversion}</value> </list> <list> <value>app</value> <value>#{ios.app}</value> </list> </util:list> <!-- appium driver --> <bean id="url" class="java.net.url"> <constructor-arg index="0" value="#{baseconfig.url}"></constructor-arg> </bean> <bean id="capabilities" class="org.openqa.selenium.remote.desiredcapabilities"></bean> <bean id="driver" class="test.driver"> <property name="capabilitylist" ref="#{baseconfig.environment}"></property> <property name="capabilities" ref="capabilities"></property> <property name="url" ref="url"></property> </bean> </beans>
在这个配置文件中,我们定义了两个.properties,分别用来存放android,ios的相关配置
第三个配置文件,通过
<property name="capabilitylist" ref="#{baseconfig.environment}"></property>
来获取加载哪个配置文件
.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<mobileelement> 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配置应用详细介绍的详细内容。
其它类似信息

推荐信息