Appium是一个开源的,适用于原生或混合移动应用应用( hybrid mobile apps)的自动化测试平台,能够很是快捷的为iOS和Android移动平台建立功能自动化测试用例。相比其余的移动自动化测试工具,Appium测试因为调用了Selenium的client库使其能够使用任意的语言,包括Python、Ruby、Node.js,Objective,java等。java
官方地址:http://appium.io/android
Mac OSX 10.7+
XCode 4.5+ w/ Command Line Toolsios
Mac OSX 10.7+ or Windows 7+ or Linuxweb
Android SDK ≥ 16 (SDK < 16 in Selendroid mode)chrome
iOS: Apple's UIAutomation
Android 4.2+: Google's UiAutomator
Android 2.3+: Google's Instrumentation浏览器
import java.net.MalformedURLException; import java.net.URL; import org.junit.After; import org.junit.Before; import org.openqa.selenium.remote.CapabilityType; import org.openqa.selenium.remote.DesiredCapabilities; import com.tmall.app.search.monkey.page.TMGuideActivityPage; import io.appium.java_client.AppiumDriver; public class BaseTest { protected AppiumDriver driver; //打开app,进行一些初始化工做。如进入目标页面等... @Before public void setUp() throws Exception { setUpDriver(); //TMGuideActivityPage page = new TMGuideActivityPage(driver); //if(page.isReady()){ // page.splash(); //} } @After public void tearDown() throws Exception { driver.quit(); } //启动appium Driver public void setUpDriver() throws MalformedURLException{ // final File appDir = new File("D:\\TMApp"); // final File app = new File(appDir, "10002119.apk"); final DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); capabilities.setCapability("deviceName", "Android"); capabilities.setCapability("platformVersion", "4.3"); capabilities.setCapability("platformName", "Android"); // capabilities.setCapability("app", app.getAbsolutePath()); capabilities.setCapability("appPackage", "com.tmall.wireless"); capabilities.setCapability("appActivity",//".module.main.TMMainTabActivity"); ".module.launchalert.TMLaunchAlertActivity"); capabilities.setCapability("appWaitActivity", ".module.main.TMMainTabActivity"); capabilities.setCapability("newCommandTimeout",120); driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); } } public class DetailTest extends BaseTest{ @Test public void MyDetailTest() { Search s = new Search(); s.doAction(driver); //assert(xxxxx); }
}ruby
DesiredCapabilities 负责启动服务端时的参数设置。实际使用时根据本身的须要,可自行修改一些参数。session
好比,应用程序在查找某个页面的元素时,定位可能会时间超长。默认的命令间隔时间是60s,若是在60s内没有找到,就会自动退出。能够使用newCommandTimeout
设置为更大的数值。app
capabilities.setCapability("newCommandTimeout",240);
好比,最开始使用appium时,设置了上面的安装apk的路径,结果安装后调试程序发现接口无返回数据。后来定位问题是由于安装时进行了重签名。程序的保护机制让数据无返回了。能够使用noSign
设置来避免重签名。less
capabilities.setCapability("noSign","true");
固然,后来发现不在程序里写文件路径,而是提早安装好测试包,这样就避免了每次都要从新安装。
http://appium.io/slate/en/master/?ruby#appium-server-capabilities
**Server capabilities** Capability Appium 、Selendroid platformName 平台的名称:iOS, Android, or FirefoxOS platformVersion 移动设备的系统版本号,7.1, 4.4 deviceName IOS:instruments -s devices,Android:随便写 app 安装文件路径:/abs/path/to/my.apk or http://myapp.com/app.ipa browserName 测试的web浏览器,若是是测app则忽略 newCommandTimeout 等待新命令的最长时间,超时后退出。默认是60s autoLaunch 是否自动安装和启动,默认true language 模拟器的语言设置 locale 模拟器的地区设置 udid 设备号 orientation 模拟器的横竖屏设置 autoWebview Move directly into Webview context noReset 在当前session前不重置app状态 fullReset ios删除文件夹,Android删除app数据。 **android only** appActivity 要启动的Activity appPackage 要启动的包 appWaitActivity 等待的Activity appWaitPackage 等待的包 deviceReadyTimeout 等待设备就绪的时间 androidCoverage enablePerformanceLogging (Chrome and webview only)default=false androidDeviceReadyTimeout androidDeviceSocket avd avdLaunchTimeout avdReadyTimeout avdArgs useKeystore keystorePath keystorePassword keyAlias keyPassword chromedriverExecutable autoWebviewTimeout intentAction intentCategory intentFlags optionalIntentArguments unicodeKeyboard resetKeyboard noSign Skip checking and signing,work only with UiAutomator and not with selendroid ignoreUnimportantViews **ios only** calendarFormat bundleId udid launchTimeout locationServicesEnabled locationServicesAuthorized autoAcceptAlerts nativeInstrumentsLib nativeWebTap safariAllowPopups safariIgnoreFraudWarning safariOpenLinksInBackground keepKeyChains localizableStringsDir processArguments interKeyDelay showIOSLog