appium是一款完全的免费的开源性自动化测试框架,支持全平台使用。appium windows版主要基于webdriver协议添加对移动设备自动化api扩展而成的,并采用Client/Server的设计模式,支持多语言命令,它允许开发测试人员在不同的平台,使用JAVA、Python和Ruby等不同的开发语言,使用同一套API来编写自动化测试脚本,大大提高了程序测试的灵活性。

Appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium支持IOS、Android及FirefoxOS平台。Appium使用WebDriver的jsonwire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。Appium对IOS系统的支持得益于DanCuellar’s对于IOS自动化的研究。Appium也集成了Selendroid,来支持老android版本。
Appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web 应用和混合应用。
“移动原生应用”是指那些用iOS或者 Android SDK 写的应用(Application简称app)。
“移动web应用”是指使用移动浏览器访问的应用(appium支持iOS上的Safari和Android上的 Chrome)。
“混合应用”是指原生代码封装网页视图——原生代码和 web 内容交互。比如,像 Phonegap,可以帮助开发者使用网页技术开发应用,然后用原生代码封装,这些就是混合应用。
不必局限于某种语言或者框架来写和运行测试脚本;
一个移动自动化的框架不应该在接口上重复造轮子;
无论精神上,还是名义上,都必须要开源。
appium选择了Client/Server的设计模式。只要client能够发送http请求给server,那么的话client用什么语言来实现都是可以的,这就是appium及Selenium(WebDriver)如何做到支持多语言的原因;
appium扩展了WebDriver的协议,没有自己重新去实现一套。这样的好处是以前的WebDriver API能够直接被继承过来,以前的Selenium(WebDriver)各种语言的binding都可以拿来就用,省去了为每种语言开发一个client的工作量;

通过上面一张图简单展示了appium的工具原理。
首先,appium支持多语言,因为它针对流的几种语言分别开发的相应的appium库。好处就是我们可以选择自己熟悉的语言编写appium脚本。
其次,appium支持多平台,包括MAC和Windows。它针对这两大平台开发了appium-Server。
最后,appium又同时支持Android 和 iOS两个操作系统。
这就使得appium变得非常灵活。
当我在MAC平台上,通过Python(python-client )编写了一个appium自动化脚本并执行,请求会首先到 appium.dum (MAC下的appium-Server),appium-Server通过解析,驱动iOS设备来执行appium自动化脚本。
或者,我在Windows平台上,通过Java( java-client )编写了一个appium自动化脚本并执行,请求会首先到 appiumForWindow.zip(Window下的appium-Server),appium-Server通过解析,驱动Android虚拟机或真机来执行appium脚本。
所以,你会看到appium的强大之处就在于此。
Appium 的核心是一个 web 服务器,它提供了一套 REST 的接口。它收到客户端的连接,监听到命令,接着在移动设备上执行这些命令,然后将执行结果放在 HTTP响应中返还给客户端。
·Session
自动化始终围绕一个session进行,客户端初始化一个seesion(会话)来与服务端交互,不同的语言有不同的实现方式,但是他们最终都是发送为一个POST请求给服务端,请求中包含一个JSON对象,被称作“desired capabilities”。此时,服务端就会开启一个自动化的 session,然后返回一个 session ID,session ID将会被用户发送后续的命令。
·Desired Capabilities
Desired capabilities 是一些键值对的集合 (比如,一个 map 或者 hash),客户端将这些键值对发给服务端,告诉服务端我们想要怎么测试。比如,我们可以把platformName capability 设置为 iOS,告诉 Appium 服务端,我们想要一个iOS 的 session,而不是一个 Android 的。
·Appium Server
Appium server 是用 Node.js 写的。我们可以用源码编译或者从 NPM 直接安装。
·Appium 服务端
Appium 服务端有很多语言库 Java, Ruby, Python, PHP, JavaScript 和 C#,这些库都实现了 Appium 对 WebDriver 协议的扩展。当使用 Appium 的时候,你只需使用这些库代替常规的 WebDriver 库就可以了。
·Appium.dmg, Appium.exe
我们提供了 GUI 封装的 Appium 服务端下载,它封装了运行 Appium服务端的所有依赖,而不需要担心怎样安装Node.js。其中还包括一个Inspector工具(MAC机上才能用),可以帮助你检查应用的界面层级,这样写测试用例时更方便。
appium提供两种方式进行安装,一种提供了应用程序,即为一键安装即可完成安装,另一种方式安装是命令,只要在cmd输入相关命令即可完成安装。
appium安装流程如下:
首先在本站下载appium安装程序
解压出压缩包文件,直接双击应用程序,启动安装

选择语言,默认是英语的,暂时无中文语言,那么默认语言安装即可。

然后直接“next”,下一步即可

默认安装路径是在C盘,如果c空间不够大,可以选择其它安装到路径下

是为启动应用文件名,默认就好,点击下一步“next”

是否要桌面创建图标,可以选择和不选择,这里默人安装,点击“next”

安装信息进行确认,点击“install”

点击install,开始安装程序,在安装程序过程中,会不断打印信息。

显示completing the appium setup wizard,说明提示安装完成

进入安装到安装目录下,双击启动appium程序

提示下列,说明安装无问题,开始appium自动化测试之旅


一. Android Settings
主要是配置android的相关设置,他里面的结构图如下:

1.Application Path:选择路径,选择需要测试的app在本电脑存放的一个路径。在启动appium时他会默认去该路径下去寻找这个app,然后将他安装到指定的手机上。
2.Package:之前提到过的,我们这个包的身份证,我们需要通过这个去找到包,不然我们安装后我们通过什么去辨别这些包呢?
3.Launch Activity:故名思义,启动的activity,activity的时候提到过,我们启动app时需要去运行的activity,这里我们填写首次启动页面的activity。
备注:这里需要注意一个问题在我们每次通过Choose选择apk后,appium会自动把这个包进行重新签名,那么在package以及activity里面会自动把包名和activity的名称列进去,但是这里会出现一个问题,每次选择apk后列表中会有一个缓存的原因,即使你更改了apk,但是package还是没有变,这样启动的时候就一直报错,遇见这样的情况不要着急,重新启动两次就好。
4.Wait for Activity: 和上面的差不多,意思是等待某个Activity打开,用的时间不是很多,做了解。
5.Launch Device:标签下面的东西用得相对比较少,后面大家可以去了解一下。
6.Capabilities:该标签下和我们做自动化关系很大,后面我们做自动化时如何配置启动app等信息就用的该标签下的数据。
7.Platform Name:我们测试的app的类型,ios选择ios,android选择Android就好。
8.Automation Name:测试引擎的名称,我们使用的是appium,所以你第一眼就能看见Appium,但是他还有一个Selendroid。可能看到这里会有一些疑惑,为什么appium要选择两套系统呢?其实这个应该追溯到android的版本问题,android自己的工具在4.2版本以前是一个,但是后面进行了更新,可能也正是因为这个原因appium也才采用了两套,所以当你测试的app安装的机器时在4.0或之前的版本时那么这里的引擎你就必须选择Selendroid,是否这样大家可以动手去试一试。检验真理的唯一标准就是自己动手尝试。
9.Platform Version:安装应用手机的版本号,android的是几点几的版本。
10.Device Name:设备名称。
备注:这里会有一个问题,如果你测试android时,只把一台手机插入到电脑,即使你输入的Device Name是错误的,但是你依然能够正常安装,使用。但是ios是不行的。不知道在设计的时候是否就是如此考虑的,如果在以后使用中遇见类似问题大家不要惊慌。
11.Advanced标签下的东西在初级阶段不用担心,这个标签只是在你想同一台电脑同时控制多台手机的时候才能使用,需要更改Bootstrap Port的端口号,记住这一点就好。
二、General Setting:
在General Setting里面在通常情况下我们使用默认设置就好,但还是有一些基础设置可以进行调整,方便后期的学习。整个页面分成了Server和log两部分,默认的情况如下面图片。

1.Server Address:配置appium服务的地址,正常情况我们不需要更改,但是如果我们需要配置多台手机的时候启动了多个appium服务,那么这里的端口号我们需要进行调整,如果你多个都弄的同一个端口会报错。
2.Override Existing Session: session覆盖,可能对于初学者不理解什么叫session,你这里暂时理解为会话,我和你会话的唯一标示。
3.Log To File:默认状态是没有任何数据,但是在做自动化时建议选择,因为选择之后appium在运行时产生的日志都会保留到你设置的问题件,这个对后期的bug定位有相当大的帮助。切记!
步骤1.安装node.js
首先下载node.js安装文件,并安装该程序。

安装完成后,在命令提示符中输入node -V或者npm验证是否成功安装。


步骤2.安装JDK
由于android是由Java语言开发的,所以如果要进行android自动化测试,需要安装java环境,所以我们需要安装JDK。根据当前PC机的系统选择对应的jdk进行安装。

jdk安装完成后,需要将jdk的加到环境变量中,需要进行环境变量设置:我的电脑->右键->属性->高级->环境变量->系统变量->新建;以及将该变量加到系统的path中。



步骤3.安装android SDK
下载android sdk并解压放到对应的目录下

双击打开sdk manager,并进行sdk的相关插件的安装和更新。点击Tools->options进行HTTP的代理设置,由于国内只能通过代理才能访问google的android安装,故需要填写可用的代理网址,图中为国内可用的代理网址,更多的可以通过百度搜索。

关闭后,sdk manager会自动与代理连接,将可安装和可更新的插件展示出来,根据实际需求进行对应的安装和更新。

安装完成后,进行android sdk的环境变量设置,将platforms-tools和tools目录加入到环境变量。

步骤4.安装appium client
在命令行通过命令"pip install Appium-Python-Client"安装python版本的appium client,如果没有python,请先安装python。

步骤5.安装appium
首先下载appium安装程序到本地,并安装该程序。
appium安装成功后,打开该程序。

步骤6.appium连接真机
将安卓手机通过usb连接到电脑,并开启调试模式;然后在命令提示符中输入"adb device -l"查看手机的"Device Name"

点击appium左上角的"机器人图标",在弹出的窗口填入安卓手机的相关信息,然后点击右上角的"播放"按钮。如果手机提示需要安装程序(appium控制手机的相关程序),请允许。

首先在手机上打开需要测试的APP,然后在运行sdk的tools目录下的ui automator viewer;在打开的窗口中点击左上角的连接设备图标,中就会出现安卓手机的当前界面;通过鼠标点击相应位置,就可以进行app的相关API元素查询了。根据API元素就可以进行python +APP自动化脚本编写了。

//截屏图片保存路径
static String path = "E:\\workspace\\PhonewoTest\\ScreenshotPic\\";
static AndroidDriver driver = DriverInit.driver;
/*截屏
* tag表示一个模块标记字符
*/
public static void takeScreenShot(AndroidDriver driver,String tag){
File screenShotFile =
((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
try {
FileUtils.copyFile(screenShotFile, new File(path + tag +
getCurrentDateTime()+ ".jpg"));
}catch (IOException e) {
e.printStackTrace();
}
}
//格式化当前时间
public static String getCurrentDateTime(){
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd_HHmmss");//设置日期格式
return df.format(new Date());
}
2 粘贴
/*粘贴
*/
public static void Clip(WebElement el) {
//获取焦点
el.click();
//ctrl+v的组合操作
driver.sendKeyEvent(50,AndroidKeyMetastate.META_CTRL_ON);
}
3 硬件返回
driver.sendKeyEvent(4);
或者,
driver.sendKeyEvent(AndroidKeyCode.BACK);
4 滑动
//向上滑动
driver.swipe(20, 400, 20, 100, 300);
5 长按
//初始化
TouchAction action = new TouchAction(driver);
//获取要长按的元素
WebElement el = driver.findElement(By.id("cn.langma.phonewo:id/user_name"));
//长按
action.longPress(el).perform();
6 按住不放
//初始化
TouchAction action = new TouchAction(driver);
//按住等待5秒后释放
action.press(driver.findElement(By.name("按住说话"))).waitAction(5000);
action.perform();
解决方案:把appium-desktop打开--点击start server
appium-desktop就运行了

再重新运行脚本,必要时可重启电脑
部分手机用Swipe滑动引导图片无效
问题现象:部分手机用swipe方法模拟滑动引导图片时,出现无效或未按预期执行的现象
解决方法:调整swipe最后一个参数duration
driver.swipe(xStart, yStart, xEnd, yEnd, 100);
每次执行用例都要做安装登录应用的操作
问题现象:在编写测试用例时,需要经常进行调试脚本运行情况,但每次执行都需要重新安装登录,非常繁琐和耗时。
解决方法:
在执行一次安装登录操作后,停止Appium程序,点击Android Settings ,选中“No Reset”,重新启动Appium。再次执行用例时就不会重新安装登录了。
定位Android设备或模拟器页面元素出现问题
问题现象:编写脚本时,往往需要定位元素,但常用的name常常出现定位不到的问题,此时就需要通过classname和id来定位(id定位需要Android系统版本4.2及以上)。
解决方法:
1、连接上设备或模拟器,进入SDK的tools目录下,启动uiautomatorviewer.bat
2、 Ui Automator Viewer打开后点击按钮 Device Screenshot就可以看到当前设备或模拟器视图,在右侧可以看到视图的元素。如图:


【基本介绍】
Appium是什么?Appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium支持IOS、Android及FirefoxOS平台。Appium使用WebDriver的jsonwire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。Appium对IOS系统的支持得益于DanCuellar’s对于IOS自动化的研究。Appium也集成了Selendroid,来支持老android版本。
Appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web 应用和混合应用。
“移动原生应用”是指那些用iOS或者 Android SDK 写的应用(Application简称app)。
“移动web应用”是指使用移动浏览器访问的应用(appium支持iOS上的Safari和Android上的 Chrome)。
“混合应用”是指原生代码封装网页视图——原生代码和 web 内容交互。比如,像 Phonegap,可以帮助开发者使用网页技术开发应用,然后用原生代码封装,这些就是混合应用。
【软件理念】
无需为了自动化,而重新编译或者修改我们的应用;不必局限于某种语言或者框架来写和运行测试脚本;
一个移动自动化的框架不应该在接口上重复造轮子;
无论精神上,还是名义上,都必须要开源。
【软件特点】
appium是跨平台的,可以用在OSX,Windows以及Linux桌面系统上运行。appium选择了Client/Server的设计模式。只要client能够发送http请求给server,那么的话client用什么语言来实现都是可以的,这就是appium及Selenium(WebDriver)如何做到支持多语言的原因;
appium扩展了WebDriver的协议,没有自己重新去实现一套。这样的好处是以前的WebDriver API能够直接被继承过来,以前的Selenium(WebDriver)各种语言的binding都可以拿来就用,省去了为每种语言开发一个client的工作量;
【工作原理】

通过上面一张图简单展示了appium的工具原理。
首先,appium支持多语言,因为它针对流的几种语言分别开发的相应的appium库。好处就是我们可以选择自己熟悉的语言编写appium脚本。
其次,appium支持多平台,包括MAC和Windows。它针对这两大平台开发了appium-Server。
最后,appium又同时支持Android 和 iOS两个操作系统。
这就使得appium变得非常灵活。
当我在MAC平台上,通过Python(python-client )编写了一个appium自动化脚本并执行,请求会首先到 appium.dum (MAC下的appium-Server),appium-Server通过解析,驱动iOS设备来执行appium自动化脚本。
或者,我在Windows平台上,通过Java( java-client )编写了一个appium自动化脚本并执行,请求会首先到 appiumForWindow.zip(Window下的appium-Server),appium-Server通过解析,驱动Android虚拟机或真机来执行appium脚本。
所以,你会看到appium的强大之处就在于此。
【相关概念】
·C/S 架构Appium 的核心是一个 web 服务器,它提供了一套 REST 的接口。它收到客户端的连接,监听到命令,接着在移动设备上执行这些命令,然后将执行结果放在 HTTP响应中返还给客户端。
·Session
自动化始终围绕一个session进行,客户端初始化一个seesion(会话)来与服务端交互,不同的语言有不同的实现方式,但是他们最终都是发送为一个POST请求给服务端,请求中包含一个JSON对象,被称作“desired capabilities”。此时,服务端就会开启一个自动化的 session,然后返回一个 session ID,session ID将会被用户发送后续的命令。
·Desired Capabilities
Desired capabilities 是一些键值对的集合 (比如,一个 map 或者 hash),客户端将这些键值对发给服务端,告诉服务端我们想要怎么测试。比如,我们可以把platformName capability 设置为 iOS,告诉 Appium 服务端,我们想要一个iOS 的 session,而不是一个 Android 的。
·Appium Server
Appium server 是用 Node.js 写的。我们可以用源码编译或者从 NPM 直接安装。
·Appium 服务端
Appium 服务端有很多语言库 Java, Ruby, Python, PHP, JavaScript 和 C#,这些库都实现了 Appium 对 WebDriver 协议的扩展。当使用 Appium 的时候,你只需使用这些库代替常规的 WebDriver 库就可以了。
·Appium.dmg, Appium.exe
我们提供了 GUI 封装的 Appium 服务端下载,它封装了运行 Appium服务端的所有依赖,而不需要担心怎样安装Node.js。其中还包括一个Inspector工具(MAC机上才能用),可以帮助你检查应用的界面层级,这样写测试用例时更方便。
【安装方法】
windows如何安装appiumappium提供两种方式进行安装,一种提供了应用程序,即为一键安装即可完成安装,另一种方式安装是命令,只要在cmd输入相关命令即可完成安装。
appium安装流程如下:
首先在本站下载appium安装程序
解压出压缩包文件,直接双击应用程序,启动安装

选择语言,默认是英语的,暂时无中文语言,那么默认语言安装即可。

然后直接“next”,下一步即可

默认安装路径是在C盘,如果c空间不够大,可以选择其它安装到路径下

是为启动应用文件名,默认就好,点击下一步“next”

是否要桌面创建图标,可以选择和不选择,这里默人安装,点击“next”

安装信息进行确认,点击“install”

点击install,开始安装程序,在安装程序过程中,会不断打印信息。

显示completing the appium setup wizard,说明提示安装完成

进入安装到安装目录下,双击启动appium程序

提示下列,说明安装无问题,开始appium自动化测试之旅

【界面介绍】
首先看第一幅图,如果你的是windows那么界面就应该是这样的,所以你发现你的和我的不一样也不用担心,正常。windows版整个界面只有7个按钮,我会按照从左到右从上到下的顺序讲。(mac的会有一定的差异,但并不是很大,只是排版和样式的问题,但是功能都一样。)
一. Android Settings
主要是配置android的相关设置,他里面的结构图如下:

1.Application Path:选择路径,选择需要测试的app在本电脑存放的一个路径。在启动appium时他会默认去该路径下去寻找这个app,然后将他安装到指定的手机上。
2.Package:之前提到过的,我们这个包的身份证,我们需要通过这个去找到包,不然我们安装后我们通过什么去辨别这些包呢?
3.Launch Activity:故名思义,启动的activity,activity的时候提到过,我们启动app时需要去运行的activity,这里我们填写首次启动页面的activity。
备注:这里需要注意一个问题在我们每次通过Choose选择apk后,appium会自动把这个包进行重新签名,那么在package以及activity里面会自动把包名和activity的名称列进去,但是这里会出现一个问题,每次选择apk后列表中会有一个缓存的原因,即使你更改了apk,但是package还是没有变,这样启动的时候就一直报错,遇见这样的情况不要着急,重新启动两次就好。
4.Wait for Activity: 和上面的差不多,意思是等待某个Activity打开,用的时间不是很多,做了解。
5.Launch Device:标签下面的东西用得相对比较少,后面大家可以去了解一下。
6.Capabilities:该标签下和我们做自动化关系很大,后面我们做自动化时如何配置启动app等信息就用的该标签下的数据。
7.Platform Name:我们测试的app的类型,ios选择ios,android选择Android就好。
8.Automation Name:测试引擎的名称,我们使用的是appium,所以你第一眼就能看见Appium,但是他还有一个Selendroid。可能看到这里会有一些疑惑,为什么appium要选择两套系统呢?其实这个应该追溯到android的版本问题,android自己的工具在4.2版本以前是一个,但是后面进行了更新,可能也正是因为这个原因appium也才采用了两套,所以当你测试的app安装的机器时在4.0或之前的版本时那么这里的引擎你就必须选择Selendroid,是否这样大家可以动手去试一试。检验真理的唯一标准就是自己动手尝试。
9.Platform Version:安装应用手机的版本号,android的是几点几的版本。
10.Device Name:设备名称。
备注:这里会有一个问题,如果你测试android时,只把一台手机插入到电脑,即使你输入的Device Name是错误的,但是你依然能够正常安装,使用。但是ios是不行的。不知道在设计的时候是否就是如此考虑的,如果在以后使用中遇见类似问题大家不要惊慌。
11.Advanced标签下的东西在初级阶段不用担心,这个标签只是在你想同一台电脑同时控制多台手机的时候才能使用,需要更改Bootstrap Port的端口号,记住这一点就好。
二、General Setting:
在General Setting里面在通常情况下我们使用默认设置就好,但还是有一些基础设置可以进行调整,方便后期的学习。整个页面分成了Server和log两部分,默认的情况如下面图片。

1.Server Address:配置appium服务的地址,正常情况我们不需要更改,但是如果我们需要配置多台手机的时候启动了多个appium服务,那么这里的端口号我们需要进行调整,如果你多个都弄的同一个端口会报错。
2.Override Existing Session: session覆盖,可能对于初学者不理解什么叫session,你这里暂时理解为会话,我和你会话的唯一标示。
3.Log To File:默认状态是没有任何数据,但是在做自动化时建议选择,因为选择之后appium在运行时产生的日志都会保留到你设置的问题件,这个对后期的bug定位有相当大的帮助。切记!
【环境搭建】
appium环境搭建步骤1.安装node.js
首先下载node.js安装文件,并安装该程序。

安装完成后,在命令提示符中输入node -V或者npm验证是否成功安装。


步骤2.安装JDK
由于android是由Java语言开发的,所以如果要进行android自动化测试,需要安装java环境,所以我们需要安装JDK。根据当前PC机的系统选择对应的jdk进行安装。

jdk安装完成后,需要将jdk的加到环境变量中,需要进行环境变量设置:我的电脑->右键->属性->高级->环境变量->系统变量->新建;以及将该变量加到系统的path中。



步骤3.安装android SDK
下载android sdk并解压放到对应的目录下

双击打开sdk manager,并进行sdk的相关插件的安装和更新。点击Tools->options进行HTTP的代理设置,由于国内只能通过代理才能访问google的android安装,故需要填写可用的代理网址,图中为国内可用的代理网址,更多的可以通过百度搜索。

关闭后,sdk manager会自动与代理连接,将可安装和可更新的插件展示出来,根据实际需求进行对应的安装和更新。

安装完成后,进行android sdk的环境变量设置,将platforms-tools和tools目录加入到环境变量。

步骤4.安装appium client
在命令行通过命令"pip install Appium-Python-Client"安装python版本的appium client,如果没有python,请先安装python。

步骤5.安装appium
首先下载appium安装程序到本地,并安装该程序。
appium安装成功后,打开该程序。

步骤6.appium连接真机
将安卓手机通过usb连接到电脑,并开启调试模式;然后在命令提示符中输入"adb device -l"查看手机的"Device Name"

点击appium左上角的"机器人图标",在弹出的窗口填入安卓手机的相关信息,然后点击右上角的"播放"按钮。如果手机提示需要安装程序(appium控制手机的相关程序),请允许。

首先在手机上打开需要测试的APP,然后在运行sdk的tools目录下的ui automator viewer;在打开的窗口中点击左上角的连接设备图标,中就会出现安卓手机的当前界面;通过鼠标点击相应位置,就可以进行app的相关API元素查询了。根据API元素就可以进行python +APP自动化脚本编写了。

【操作技巧】
1 截屏//截屏图片保存路径
static String path = "E:\\workspace\\PhonewoTest\\ScreenshotPic\\";
static AndroidDriver driver = DriverInit.driver;
/*截屏
* tag表示一个模块标记字符
*/
public static void takeScreenShot(AndroidDriver driver,String tag){
File screenShotFile =
((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
try {
FileUtils.copyFile(screenShotFile, new File(path + tag +
getCurrentDateTime()+ ".jpg"));
}catch (IOException e) {
e.printStackTrace();
}
}
//格式化当前时间
public static String getCurrentDateTime(){
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd_HHmmss");//设置日期格式
return df.format(new Date());
}
2 粘贴
/*粘贴
*/
public static void Clip(WebElement el) {
//获取焦点
el.click();
//ctrl+v的组合操作
driver.sendKeyEvent(50,AndroidKeyMetastate.META_CTRL_ON);
}
3 硬件返回
driver.sendKeyEvent(4);
或者,
driver.sendKeyEvent(AndroidKeyCode.BACK);
4 滑动
//向上滑动
driver.swipe(20, 400, 20, 100, 300);
5 长按
//初始化
TouchAction action = new TouchAction(driver);
//获取要长按的元素
WebElement el = driver.findElement(By.id("cn.langma.phonewo:id/user_name"));
//长按
action.longPress(el).perform();
6 按住不放
//初始化
TouchAction action = new TouchAction(driver);
//按住等待5秒后释放
action.press(driver.findElement(By.name("按住说话"))).waitAction(5000);
action.perform();
【相关问题】
“appium报错:由于目标计算机积极拒绝,无法连接”怎么解决?解决方案:把appium-desktop打开--点击start server
appium-desktop就运行了

再重新运行脚本,必要时可重启电脑
部分手机用Swipe滑动引导图片无效
问题现象:部分手机用swipe方法模拟滑动引导图片时,出现无效或未按预期执行的现象
解决方法:调整swipe最后一个参数duration
driver.swipe(xStart, yStart, xEnd, yEnd, 100);
每次执行用例都要做安装登录应用的操作
问题现象:在编写测试用例时,需要经常进行调试脚本运行情况,但每次执行都需要重新安装登录,非常繁琐和耗时。
解决方法:
在执行一次安装登录操作后,停止Appium程序,点击Android Settings ,选中“No Reset”,重新启动Appium。再次执行用例时就不会重新安装登录了。
定位Android设备或模拟器页面元素出现问题
问题现象:编写脚本时,往往需要定位元素,但常用的name常常出现定位不到的问题,此时就需要通过classname和id来定位(id定位需要Android系统版本4.2及以上)。
解决方法:
1、连接上设备或模拟器,进入SDK的tools目录下,启动uiautomatorviewer.bat
2、 Ui Automator Viewer打开后点击按钮 Device Screenshot就可以看到当前设备或模拟器视图,在右侧可以看到视图的元素。如图:


