本文主要是讲述,使用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配置应用详细介绍的详细内容。