官网:https://appium.io/
APP自动化测试工具
安装电脑客户端
下载地址:https://github.com/appium/appium-desktop/releases/tag/v1.21.0 根据自己系统下载对应的客户端,安装提示安装。如适用于windows系统的Appium-windows-1.21.0.exe。
配置客户端
打开客户端后,如下图,不用修改什么,点击Edit Configurations按钮。 配置下图2个参数:JAVA_HOME若电脑系统变量配置了同名参数则会自动读取到。ANDROID_HOME需要先配置到系统变量中,然后将路径也填入下图中。点击Save…按钮。 可以安装appium-doctor来检查appium的配置情况。安装方式可参考安装appium-doctor
启动服务
回到主界面,点击Start Server vX.X.X按钮。进入控制台日志界面,看到Appium REST http interface listener started on 0.0.0.0:4723就表示启动成功了。
连接设备中的APP
认识界面提供的功能
点击上图搜索按钮 主要了解介绍图中4个地方的用处(其实其他我还不会用) 1、直译为渴望的能力,其实就是填写一组你想要连接的设备和app信息。3区域为输入参数的区域。 2、已保存的能力集。当你填完3区域内容后,点击右下角Save As…按钮,你所填的内容会保存一份到这个集合中,下次再进入该界面可以直接选择而不用输入。 3、一组能力列表。需要根据自己的需要填入,如连接一个设备内的App的配置: { “platformName”: “Android”, “platformVersion”: “8.0.0”, “appPackage”: “com.example.myapplication”, “appActivity”: “.MainActivity” } 参数介绍: platformName:平台名称,如Android等。 platformVersion:平台版本,android系统版本。 appPackage:应用包名。 appActivity:应用启动页名称。 提示:应用包名和启动页名称可以通过adb命令查到。 4、以json格式显示3区域输入的参数和值。
开始连接
一组能力输入后,点击右下角“start session”,就可以打开与设备交互的会话窗口。
注意:若出现错误:An unknown server-side error occurred while processing the command. Original error: Cannot verify the signature of ‘C:\Program Files\Appium\resources\app\node_modules\appium\node_modules\appium-uiautomator2-server\apks\appium-uiautomator2-server-v4.21.1.apk’. Original error: java.lang.UnsupportedClassVersionError: com/android/apksigner/ApkSignerTool has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0 …。start session成功条件是android sdk的build-tools内存在的版本不能大于应用使用的build-tool版本。这应该也算是appium的一个bug吧。 当我的这个目录中还存在29.0.2,29.0.3,30.0.0时,而我所要连接的应用是用28.0.3构建的,start session就会报错。当我把29.0.2,29.0.3,30.0.0或30.0.0文件夹移除后,就可以正常启动了。
制作脚本
主要的思路就是像拍摄视频的手法一样,这里是录制操作在一个脚本代码中,然后复制脚本代码到不同的工具中去执行,从而实现App自动化。
认识界面提供的功能
主要先学习这上图这几个地方的功能: 1、开始录制和停止按钮 2、鼠标点击选择目标控件 3、对目标控件可执行的操作,如Tap(点击)、Send Keys(发送参数)、Clear(清楚参数)。例如,对于EditText控件,Send Keys输入的值会成为其输入内容,Clear操作会清空其输入内容。 4、左侧UI的布局结构。无需太多关注。 5、注2选中的控件的属性。无需太多关注。 6、注3操作后生成脚本代码的区域。 7、点击该按钮可切换脚本显示模式。如左侧下拉选项当前显示Java-JUnit,就会以该方式显示脚本代码,再点击一次又显示为简化代码。 其他:与注1同位置的按钮还有一个刷新按钮,作用是当APP界面改变后,而Appium的该界面未同步显示时,需要用户手动点击该刷新按钮。与注7同位置的按钮还有复制和清空按钮,复制用于拷贝脚本去其他工具执行,清空是用于为录制下一段脚本做准备。
基本制作步骤
注意都在上面的界面中用鼠标进行操作 1、开始录制 2、选择控件 3、对目标控件进行操作。 4、停止录制 5、切换脚本到具体工具可执行模式 6、拷贝脚本到其他工具中执行。
执行脚本
以Android Studio和生成Java -JUnit工具的脚本为例
1、在项目的build文件中加入仓库地址:maven { url ‘https://jitpack.io’ }。在app模块的build文件的依赖中加入implementation ‘com.github.appium:java-client:v7.5.1’。 2、在app模块的src->test->java->包名文件夹下新建一个类A,将上一步得到的脚本拷贝进去。 3、右键类A选择Run ‘A’执行脚本。 4、在Run窗口和手机中查看App自动化执行情况。
由于脚本中每个操作是连续执行,与应用实际每个操作之间有时间间隔不同,所以需要我们额外在脚本中的每个操作之间增加延时的代码。 Thread.sleep(3000);具体要延时多久根据实际操作的大概间隔时间。
脚本内容简化版和可执行版对比的例子
简化版代码: MobileElement el1 = (MobileElement) driver.findElementById(“com.example.myapplication:id/et_imei”); el1.click(); JAVA -JUnit可执行版代码:
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import junit.framework.TestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.remote.DesiredCapabilities;
public class SampleTest {
private AndroidDriver driver;
@Before
public void setUp() throws MalformedURLException {
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
desiredCapabilities.setCapability("platformName", "Android");
desiredCapabilities.setCapability("platformVersion", "8.0.0");
desiredCapabilities.setCapability("appPackage", "com.example.myapplication");
desiredCapabilities.setCapability("appActivity", ".MainActivity");
desiredCapabilities.setCapability("ensureWebviewsHavePages", true);
URL remoteUrl = new URL("http://localhost:4723/wd/hub");
driver = new AndroidDriver(remoteUrl, desiredCapabilities);
}
@Test
public void sampleTest() {
MobileElement el1 = (MobileElement) driver.findElementById("com.example.myapplication:id/et_imei");
el1.click();
Thread.sleep(3000);
}
@After
public void tearDown() {
driver.quit();
}
}
|