资讯详情

基于Java语言的Appium的使用讲义

?
是一个移动端的自动化测试框架,可用于测试原生应用,移动网页应用和混合型应用,
而且是跨平台的。
?
本地应用是指使用 android 或 ios 的 sdk 编写应用;
?
移动网页应用是指类似于网页应用的网页应用 ios 中 safari 应用或者 Chrome 应用或者类
浏览器览器;
?
介于混合应用 web-app 和 native-app 之间的应用。
? Appium 是模拟人的操作进行功能自动化,通常用于功能测试和兼容性测试。
?
第一条采用底层驱动提供的自动化框架。
? IOS
?
苹果的 UIAutomation
? Android 4.2
?
谷歌的 UiAutomator
?
第二条使用底层驱动提供统一 API ,就是 WebDriver API 。
? WebDriver( 也称 Selenium WebDriver) 其实是一个 C/S 架构协议称为 JSON Wire
Protocol 。通过本协议,客户端可以发送任何语言 HTTP 请求给服
服务器。这意味着您可以自由选择您想要使用的测试框架和执行器,也可以使用任何
包含 HTTP 将客户端的库文件添加到您的代码中。换句话说, Appium 的 WebDriver
不是技术测试框架,而是自动化库。
?
第三条:在 WebDriver 的基础上,扩展了一些适合移动端自动化协议的 API 。
核心是 web 服务器
它接受客户端的连接,接收客户端的命令,在手机设备上执行命令,然后通过
HTTP 的响应收集命令执行的结果。
 Session
自动化的过程通常在 session 上下文中执行。
客户端初始化一个 session 会话,虽然不同的语言初始化的方式不同,但是他们
都要发送 POST/session 请求到服务器端,这些请求里面都会带有一个对象:
desiredCapabilities ,这个时候服务器端会启动自动化 session 然后返回一个 session
ID ,以后的命令都会用这个 seesion ID 去匹配。
 Desired Capabilities
 desired capabilities 对象其实是一个 key-value 的集合,里面包含了各种各样的信
息,发送到服务器端后,服务器解析这些信息就知道了客户端对哪种 session 感 兴趣,然后就会启动相应的 session 。
这里面的信息会影响着服务器端启动 session 的类型。比如你 platformName 的值
为 ios ,就是告诉服务器启动一个 ios 的 session ,而不是 android seesion ,之后使
用 js 打开新窗口。
 Appium Server
 Appium 是一个用 Node.js 编写的 HTTP server ,它创建、并管理多个 WebDriver
sessions 来和不同平台交互,如 iOS , Android 等。
 Appium Clients
 Appium 开始一个测试后,就会在被测设备(手机)上启动一个 server ,监听来
自 Appium server 的指令,每种平台(如 iOS 和 Android )都有不同的运行和交
互方式,所以 Appium 会用某个桩程序“侵入”该平台,并接受指令,来完成测
试用例的运行。
客户端的概念不是我们传统意义上的客户端,这里客户端更好的理解是一个扩展
WebDriver 协议的库,你在用自己喜欢的语言写 case 的时候,将该语言扩展
WebDrvier 的库添加到你的环境中,你就可以理解这是个客户端。
 Appium 在不同平台中使用了标准的自动化 APIs ,所以在跨平台时,不需要重新编译
或者修改自己的应用。
 Appium 实现了真正的跨平台自动化测试。
 Appium 支持 Selenium WebDriver 支持的所有语言,如 java 、 Object-C 、
JavaScript 、
Php 、 Python 、 Ruby 、 C# 、 Perl 语言,更可以使用 Selenium WebDriver 的 Api 。
Appium 支持任何一种测试框架。
安装 node.js
是一个 Javascript 运行环境( runtime environment )。
安装 .NET framework
软件名形如 NDP...
 .net framework 是微软的开发程序的框架,用 .net 开发的程序就需要 .net 的环境来
支持才能运行。
安装 vc_redist
 VisualC++ 的运行时库,包含了一些 VisualC++ 的库函数。
如果缺少,会导致 sdk 运行异常。
计算机中如果安装过,可以忽略此步。
安装 jdk 并配置环境变量
安装 android sdk
 SDK ( software development kit )是一个 Android 开发环境。
需要 JDK 。
安装工具包和手机操作系统 
安装工具包和测试所需要的操作系统
 system image
 armeabi
第 5 代、第 6 代 ARM 处理器,早期的手机用的比较多。
 armeabi-v7a
第 7 代 ARM 处理器。
 arm64-v8a
第 8 代 64 位 ARM 处理器。
 x86
平板、模拟器用得比较多。
需要计算机是 Intel Cpu ,且支持 Intel-V 。
 x86_64
 64 位的平板。
设置 Android 环境变量
 ANDROID_HOME : e:\android\android-sdk
 PATH : ;%ANDROID_HOME%\platform-tools
 adb.exe 所在目录
创建模拟器
使用 avd manager ( android virtual device )进行模拟硬件设备
选择合适的系统镜像
使用模拟器说明
虚拟机上运行模拟器可能导致运行缓慢
建议在真机系统行运行模拟器
打开 avd manager 创建模拟器
尽量选择低分辨率的“ Device ”
启动模拟器 
上图中点击 Statrt ,即可启动
每次执行测试前,应确保模拟器处于运行状态
过程较慢,启动完成后,可查看、可关闭
安装 Appium
进行后续测试之前必须启动 Appium 。
 appium 下载地址
 https://github.com/appium/appium-desktop/releases/
在基础环境上继续安装。
 eclipse 构建路径,导入如下包入库(注意版本需要匹配)
 java-client-*.jar
下载地址
 https://mvnrepository.com/artifact/io.appium/java-client
 selenium-server-standalone-*.jar
 testng-6.14.zip
 TestNG 是一个开源自动化测试框架, TestNG 表示下一代。
用于设置测试前的准备代码,测试代码,测试完毕后的处理代码。
离线安装。
测试类自行命名,只要符合标识符命名规则即可。
定义 AppiumDriver 对象
public class AppTest {
AppiumDriver driver;
}
用于设定进入测试类后,在所有测试之前首先要执行的代码。
必须先创建 AppiumDriver 对象
@BeforeClass
public void setup() throws Exception {
// 创建 DesiredCapabilities 对象
// 指定测试平台
// 指定程序名称
// 指定启动页名称
}
创建 DesiredCapabilities 对象
 DesiredCapabilities device=new DesiredCapabilities();
用于指定测试设备信息
指定测试设备平台
 device.setCapability("deviceName" , "Android Emulator");
使用的移动设备或模拟器的种类,如 iPhone Simulator , iPad Simulator ,
Android Emulator , Galaxy S4 等
 device.setCapability("platformName" , "Android");
指定使用哪个移动操作系统平台,如 iOS , Android 或 FirefoxOS
 device.setCapability("platformVersion" , "4.4.2");
指定移动操作系统版本
指定 app 程序包名,即被测程序名
如 device.setCapability("appPackage" , "com.android.calculator2");
如何探测程序名
打开并进入软件
通过 \Android\android-sdk\tools\uiautomatorviewer.bat 去探测, package 后面的
文字即程序名。
若 cmd 窗口下出现 Unable to detect adb version 错误
检查 path 环境变量: PATH : ;%ANDROID_HOME%\platform-tools
指定 app 启动页名称
 device.setCapability("appActivity" , ".Calculator");
启动页的名字,类似于窗口名。
打开 APP →执行 adb logcat>D:/log.txt → 胡乱的对 APP 做一些操作→
Ctrl+C 结束 adb 命令→打开 log.txt 文件,搜索: Displayed ,“ /” 左边的
是包名,右边是 Activity 。
启动 App
 driver = new AndroidDriver(new URL("http://localhost:4723/wd/hub") , device);
 wd 是 WebDriver 的缩写
 hub 指主(中心)节点, selenium 分布式里的中心节点
运行方式→ TestNG Test
注意启动 Appium 。
测试方法需要加 @Test 才能运行。
在所有测试之后再执行的代码。
退出 App
 driver.quit()
@AfterClass
public void tearDown() {
driver.quit()
}
指定要测试的方法,方法名只要符合标识符命名规则。
属性
 description=" 测试描述 "
 priority= 优先级,从 0 开始
 timeout=?ms ,超时时间
 dataProvider="Dataprovider 的名称或方法名 "
 dataProviderClass= 产生测试数据的类
@Test
public void plus(){
}
 driver.findElementById(resource-id 属性 )
 driver.findElementByClassName(class 属性 )  driver.findElementBy?( 属性 ).sendKeys(" 数据 ")
 driver.findElementBy?( 属性 ).clear()
 driver.findElementBy?( 属性 ).click()
 driver.findElementBy?( 属性 ).getText()
写法类似于正则表达式,使用更方便。
 Boolean rs=driver.findElementById(…).getText().contains( );
 Assert.assertTrue(rs);
用于测试期望结果的断言,即测试两个对象是否相等。
 String actual= 实际结果 ;
 String expected= 预期结果 ;
 Assert.assertEquals(actual, expected);
 String res=driver.findElementByClassName("android.widget.EditText").getText();
 Assert.assertEquals(res , "3");
 driver.pressKeyCode(keycode)
必须使用 AmdroidDriver
 KEYCODE_0 按键 '0' 7  KEYCODE_1 按键 '1' 8
 KEYCODE_2 按键 '2' 9
 KEYCODE_3 按键 '3' 10
 KEYCODE_4 按键 '4' 11
 KEYCODE_5 按键 '5' 12
 KEYCODE_6 按键 '6' 13
 KEYCODE_7 按键 '7' 14
 KEYCODE_8 按键 '8' 15
 KEYCODE_9 按键 '9' 16
 KEYCODE_A 按键 'A' 29
 KEYCODE_B 按键 'B' 30
 KEYCODE_C 按键 'C' 31
 KEYCODE_D 按键 'D' 32
 KEYCODE_E 按键 'E' 33
 KEYCODE_F 按键 'F' 34
 KEYCODE_G 按键 'G' 35
 KEYCODE_H 按键 'H' 36
 KEYCODE_I 按键 'I' 37
 KEYCODE_J 按键 'J' 38
 KEYCODE_K 按键 'K' 39
 KEYCODE_L 按键 'L' 40
 KEYCODE_M 按键 'M' 41
 KEYCODE_N 按键 'N' 42
 KEYCODE_O 按键 'O' 43
 KEYCODE_P 按键 'P' 44
 KEYCODE_Q 按键 'Q' 45
 KEYCODE_R 按键 'R' 46
 KEYCODE_S 按键 'S' 47
 KEYCODE_T 按键 'T' 48
 KEYCODE_U 按键 'U' 49
 KEYCODE_V 按键 'V' 50
 KEYCODE_W 按键 'W' 51
 KEYCODE_X 按键 'X' 52
 KEYCODE_Y 按键 'Y' 53
 KEYCODE_Z 按键 'Z' 54
功能键
 KEYCODE_CALL 拨号键 5
 KEYCODE_ENDCALL 挂机键 6
 KEYCODE_HOME 按键 Home 3
 KEYCODE_MENU 菜单键 82
 KEYCODE_BACK 返回键 4
 KEYCODE_SEARCH 搜索键 84
 KEYCODE_CAMERA 拍照键 27
 KEYCODE_FOCUS 拍照对焦键 80  KEYCODE_POWER 电源键 26
 KEYCODE_NOTIFICATION 通知键 83
 KEYCODE_MUTE 话筒静音键 91
 KEYCODE_VOLUME_MUTE 扬声器静音键 164
 KEYCODE_VOLUME_UP 音量增加键 24
 KEYCODE_VOLUME_DOWN 音量减小键 25
控制键
 KEYCODE_ENTER 回车键 66
 KEYCODE_ESCAPE ESC 键 111
 KEYCODE_DPAD_CENTER 导航键 确定键 23
 KEYCODE_DPAD_UP 导航键 向上 19
 KEYCODE_DPAD_DOWN 导航键 向下 20
 KEYCODE_DPAD_LEFT 导航键 向左 21
 KEYCODE_DPAD_RIGHT 导航键 向右 22
 KEYCODE_MOVE_HOME 光标移动到开始键 122
 KEYCODE_MOVE_END 光标移动到末尾键 123
 KEYCODE_PAGE_UP 向上翻页键 92
 KEYCODE_PAGE_DOWN 向下翻页键 93
 KEYCODE_DEL 退格键 67
 KEYCODE_FORWARD_DEL 删除键 112
 KEYCODE_INSERT 插入键 124
 KEYCODE_TAB Tab 键 61
 KEYCODE_NUM_LOCK 小键盘 143
 KEYCODE_CAPS_LOCK 大写锁定键 115
 KEYCODE_BREAK Break/Pause 键 121
 KEYCODE_SCROLL_LOCK 滚动锁定键 116
 KEYCODE_ZOOM_IN 放大键 168
 KEYCODE_ZOOM_OUT 缩小键 169
组合键
 KEYCODE_ALT_LEFT Alt+Left
 KEYCODE_ALT_RIGHT Alt+Right
 KEYCODE_CTRL_LEFT Control+Left
 KEYCODE_CTRL_RIGHT Control+Right
 KEYCODE_SHIFT_LEFT Shift+Left
 KEYCODE_SHIFT_RIGHT Shift+Right

标签: 1v69连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台