




免费预览已结束,剩余17页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Appium调研及使用报告 目录1Appium简介32环境搭建32.1安装Nodejs32.2安装Apache Ant42.3安装Apache Maven42.4安装Appium52.5安装Java52.6安装Android SDK62.7安装eclipse62.8安装eclipse maven3 插件72.9配置eclipse中的 maven83执行用例步骤93.1Appium启动93.2导入/创建Maven Project93.3编写用例实例123.4连接设备/启动模拟器133.5执行测试用例134用例编写及元素定位144.1用例基本结构144.2通过name定位154.3通过className定位164.4通过ID定位165特殊操作技巧165.1截屏165.2粘贴175.3硬件返回175.4滑动175.5长按175.6按住不放176疑难问题及解决方法176.1Eclipse报Eclipse is running in a JRE, but a JDK is required.186.2Appium 报Could not push strings.json186.3部分手机用Swipe滑动引导图片无效186.4定位Android设备或模拟器页面元素196.5等待界面的切换或加载196.6每次执行用例都要做安装登录应用的操作206.7Appium报Could not make a String错误206.8Appium报java.util.zip.ZipException错误206.9Appium报Couldnt start Appium REST http interface listener217Appium的优缺点217.1Appium的优点217.2Appium的缺点228参考资料221 Appium简介Appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium支持IOS、Android及FirefoxOS平台。Appium使用WebDriver的json wire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。Appium对IOS系统的支持得益于Dan Cuellars对于IOS自动化的研究。Appium也集成了Selendroid,来支持老android版本。使用Appium进行自动化测试有两个好处:1. Appium在不同平台中使用了标准的自动化APIs,所以在跨平台时,不需要重新编译或者修改自己的应用。2. Appium支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。Appium支持任何一种测试框架。如果只使用Apple的UIAutomation,我们只能用javascript来编写测试用例,而且只能用Instruction来运行测试用例。同样,如果只使用Google的UIAutomation,我们就只能用java来编写测试用例。Appium实现了真正的跨平台自动化测试。2 环境搭建2.1 安装Nodejs下载nodejs的安装包(/download/),我安装的版本为node-v0.10.28-x64.msi。安装完成后,在CMD中输入node v来查看测试安装是否成功。2.2 安装Apache Ant下载Apache Ant的压缩文件(/bindownload.cgi),并解压缩到特定文件夹后,设置环境变量。新增变量:ANT_HOME,设置值为解压缩的文件夹:D:apache-ant-1.8.2Path中新增参数:%ANT_HOME%bin安装完成后,在CMD中输入ant来查看安装是否成功。2.3 安装Apache Maven下载Apache Maven的压缩文件(/download.cgi),并解压缩到特定文件夹后,修改jar包存储目录。打开maven目录下的conf文件夹,打开settings.xml文件,配置jar包存储目录:改为新增变量:M2HOME,设置值为解压缩的文件夹:D:apache-maven-3.2.1Path中新增参数:%M2HOME%bin安装完成后,在CMD中输入mvn v来查看安装是否成功。2.4 安装Appium下载Appium的压缩文件(/appium/appium.app/downloads/),并解压缩到特定的文件夹后,设置环境变量。当前最新安装文件的版本为(AppiumForWindows-.zip)。Path中新增参数:D:Appium安装完成后,在CMD中输入appium来查看安装是否成功。2.5 安装Java下载Java的安装文件(/technetwork/java/javase/downloads/index.html),我下载的安装版本为jdk1.8。下载完成后运行安装文件,安装jdk到特定文件夹后,设置环境变量。新增变量:JAVA_HOME,设置值为安装目录:D:Javajdk1.8.0_20Path中新增参数:%JAVA_HOME%bin;%JAVA_HOME%jrebin安装完成后,在CMD中输入java version来查看安装是否成功。2.6 安装Android SDK下载Android SDK的安装文件(/sdk/index.html),我下载的是Eclipse ADT with the Android SDK for Windows,下载完成后解压缩SDK到特定文件夹后,设置环境变量。新增变量:ANDROID_HOME,设置值为安装目录:D:android-sdkPath中新增参数:%ANDROID_HOME%tools; %ANDROID_HOME%platform-tools安装完成后,在CMD中输入android来查看安装是否成功。2.7 安装eclipse下载Eclipse的安装文件Eclipse IDE for Java Developers(/downloads/)。我使用的是Android SDK安装文件中的Eclipse ADT。解压缩Eclipse ADT with the Android SDK for Windows中的Eclipse到特定文件夹。Path中新增参数:D:eclipse安装完成后,在CMD中输入eclipse来查看安装是否成功。下载eclipse的相关插件ADT-22.0.0、m2eclipse和subclipse,并配置到eclipse中,具体操作是从eclipse菜单栏的Help中打开Install New Software,然后点击Add按钮分别将这3个插件的路径添加到eclipse中进行安装。配置Android SDK,从eclipse菜单栏的Window中打开Preferences,然后进入Android选项配置SDK的路径。2.8 安装eclipse maven3 插件1、 在线安装,只要输入 http 地址:/sites/m2e,把选项勾上,然后等待它下载安装,完成之后重启 eclipse 即可。2、离线安装 ,官网并不提供 maven 插件的离线安装包,所以需要搜索下载:http:/115.com/file/dpk80gj0#eclipse-maven3-plugin.7z将eclipse-maven3-plugin.7z 解压缩放到eclipse安装目录后,重启eclipse检查 eclipse 的 maven 插件是否安装成功:Window-Preferences:2.9 配置eclipse中的 maven1、点击 Add 按钮,选到你本机安装 maven 的路径值2、点击 Browse 按钮,选到你 maven 的 setting.xml 配置文件,然后点击 OK,这样就完成了 eclipse maven 插件的配置eclipse会帮你自动下载maven插件的jar包,耐心等待!3 执行用例步骤3.1 Appium启动在cmd中输入Appium,回车启动Appium,点击右上角运行按钮,开始监听。截图如下:3.2 导入/创建Maven Project1. 创建ProjectFileNewProjectMavenMaven ProjectNextNextNext输入Group ID和Artifact IDFinish,部分截图如下:完成后的项目如图所示:2. 导入一个Maven ProjectFileImportExisting Maven ProjectsNext点击Browse,选择加入的Project路径Finish。导入完成后的项目如图所示:3.3 编写用例实例在Group ID处右击NewClass输入用例文件名称Finish。编写测试用例如下:3.4 连接设备/启动模拟器连接Android4.2以上系统的手机或在eclipse里创建模拟器,启动cmd,输入adb devices,确认设备已经连接OK,并可对其进行USB调试。3.5 执行测试用例点击RunRun AsMaven test:然后可以在elipse、模拟器/手机上看见运行结果了。4 用例编写及元素定位编写Appium测试用例时,主要工作其实在编写代码和定位元素。对于重复的代码可以通过封装代码块成方法来调用。但元素定位却是一个苦力活,因为同一个页面可能存在重复的类似的元素,那么怎么定位就成了一大问题。4.1 用例基本结构编写测试用例时,测试用例务必要按照Appium的框架结构来编写。主要由Before、Test、After三部分组成。实例:public class MainTest private AndroidDriver driver;Before public void setUp() throws Exception /初始化appium File classpathRoot = new File(System.getProperty(user.dir); File appDir = new File(classpathRoot, apk); File app = new File(appDir, PhoneWo-0.6.70-3-0-test-hz.apk); DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(platformName, Android); capabilities.setCapability(deviceName,); /capabilities.setCapability(device,Android); capabilities.setCapability(CapabilityType.BROWSER_NAME, ); capabilities.setCapability(CapabilityType.VERSION, 4.4); capabilities.setCapability(CapabilityType.PLATFORM, WINDOWS); capabilities.setCapability(app, app.getAbsolutePath(); capabilities.setCapability(app-package, cn.langma.phonewo); capabilities.setCapability(app-activity, .PPGuideUI);driver = new AndroidDriver(new URL(:4723/wd/hub),capabilities); After public void tearDown() throws Exception if (driver != null) driver.quit(); Testpublic void PhoneplusTest() throws Exception /执行启动引导测试System.err.println(引导模块begin.);new RegAndLogin().GuideTest();System.err.println(引导模块over.);从以上代码来看:Before后面的代码块主要是初始化测试环境的脚本,在执行测试用例之前运行Test后面的代码块主要是执行测试用例After后面的代码块主要是处理执行测试用例后的收尾工作Before、Test、After三个标记在同一个项目中是唯一的。4.2 通过name定位通过控件的text属性定位控件是最常用的一种方法:B方法实例1:WebElement download = driver.findElement(B(下载安装);该方法通过直接查找当前界面上所有的控件来比较每个控件的text属性是否如预期值来定位控件。实例2:List loginList = driver.findElements(By.Name(登录);loginList.get(1).click();此方法跟实例类似,首先获取所控件中text属性相同的,然后取其中一个。4.3 通过className定位通过此方法定位控件存在的一个问题是很容易发生重复。实例1: WebElement ledit = driver.findElement(By.className(android.widget.EditText);ledit.sendKeys(21085);实例2:List ledit = driver.findElements(By.className(android.widget.EditText);ledit.get(0).sendKeys(123456);4.4 通过ID定位在Android API Level18及其以上的版本增加了一个Android控件的属性ResourceId, 所以要注意在使用这种方法之前先确保你的目标测试设备使用的都是API Level 18以上的版本。实例:WebElement el = driver.findElement(By.id(cn.langma.phonewo:id/user_name);除了以上常用的方法外,还有xpath等,这里不再一一说明了。5 特殊操作技巧5.1 截屏/截屏图片保存路径static String path = E:workspacePhonewoTestScreenshotPic;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();5.2 粘贴/*粘贴*/public static void Clip(WebElement el) /获取焦点el.click();/ctrl+v的组合操作driver.sendKeyEvent(50,AndroidKeyMetastate.META_CTRL_ON);5.3 硬件返回driver.sendKeyEvent(4);或者,driver.sendKeyEvent(AndroidKeyCode.BACK);5.4 滑动/向上滑动driver.swipe(20, 400, 20, 100, 300);5.5 长按/初始化TouchAction action = new TouchAction(driver);/获取要长按的元素WebElement el = driver.findElement(By.id(cn.langma.phonewo:id/user_name);/长按action.longPress(el).perform();5.6 按住不放/初始化TouchAction action = new TouchAction(driver);/按住等待5秒后释放 action.press(driver.findElement(B(按住说话).waitAction(5000);action.perform();6 疑难问题及解决方法1234566.1 Eclipse报Eclipse is running in a JRE, but a JDK is required.问题现象:安装maven插件后,每次启动包Eclipse is running in a JRE, but a JDK is required.Some Maven plugins may not work when importing projects or updating source folders.根本原因是eclipse没有使用JAVA_HOME,而是使用的c:windowssystem32(64位系统是syswow64目录)中的javaw.exe启动的,而Maven在进行编译运行时可能会使用到JDK相关的工具(例如:com.sun.tools.jar)。解决方法:在eclipse中Window进入Preferences,选择Installed JREs添加一个JRE为JDK的安装目录并设置其为默认JRE。然后修改eclipse安装目录下的eclipse.ini文件,在该配置文件头部添加如下两行:-vmD:/Java/jdk1.8.0_20/bin/javaw/jdk的安装目录,注意路径中不要有空格若JDK的安装路径为默认路径,即C:ProgramFiles,路径中含有空格,则此处应该配置为C:PROGRA1;若为C: Program Files (x86),此处应该配置为C:PROGRA26.2 Appium 报Could not push strings.json问题现象:error: Failed to start an Appium session, err was: Error: Could not push strings.json info: debug Cleaning up android objects info: debug Cleaning up appium session info: debug Error: Could not push strings.json at E:Appiumnode_modulesappiumlibdevicesandroidandroid.js:323:26 at null. (E:Appiumnode_modulesappiumnode_modulesappium-adblibadb.js:170:16) at ChildProcess.exithandler (child_process.js:641:7) at ChildProcess.EventEmitter.emit (events.js:98:17) at maybeClose (child_process.js:743:16) at Process.ChildProcess._handle.onexit (child_process.js:810:5) info: debug Responding to client with error: status:33,value:message:A new session could not be created. (Original error: Could not push strings.json),origValue:Could not push strings.json,sessionId:null info: 37m- POST /wd/hub/session 39m31m50039m90m 10085.061 ms - 17639m 90m39m解决方法:清理电脑内存,修改模拟器SD卡空间6.3 部分手机用Swipe滑动引导图片无效问题现象:部分手机用swipe方法模拟滑动引导图片时,出现无效或未按预期执行的现象解决方法:调整swipe最后一个参数durationdriver.swipe(xStart, yStart, xEnd, yEnd, 100);6.4 定位Android设备或模拟器页面元素问题现象:编写脚本时,往往需要定位元素,但常用的name常常出现定位不到的问题,此时就需要通过classname和id来定位(id定位需要Android系统版本4.2及以上)。解决方法:1、连接上设备或模拟器,进入SDK的tools目录下,启动uiautomatorviewer.bat2、 Ui Automator Viewer打开后点击按钮 Device Screenshot就可以看到当前设备或模拟器视图,在右侧可以看到视图的元素。如图:6.5 等待界面的切换或加载问题现象:操作过程中界面切换,加载速度慢导致下一步需要点击的元素未加载出来,此时最不好的办法就是Thread.sleep(10),但此方法要求对实践把握要好,容易出错。解决方法:1、显性等待增加一定等待时间,通过WebDriverWait 和util来实现,如下代码:WebElement el = (new WebDriverWait(driver,10).until(new ExpectedCondition()public WebElement apply(WebDriver d) return d.findElement(By.className(android.widget.EditText););2、隐性等待 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);driver.findElement(By.classname(android.widget.EditText ).click();6.6 每次执行用例都要做安装登录应用的操作问题现象:在编写测试用例时,需要经常进行调试脚本运行情况,但每次执行都需要重新安装登录,非常繁琐和耗时。 解决方法:在执行一次安装登录操作后,停止Appium程序,点击Android Settings ,选中“No Reset”,重新启动Appium。再次执行用例时就不会重新安装登录了。6.7 Appium报Could not make a String错误问题现象:Appium提示Could not make a String相关错误解决方法:由于AndroidManifest.xml 损坏引导导致(突然断电可能造成该文件损坏),更换正常的apk文件即可。6.8 Appium报java.util.zip.ZipException错误问题现象:运行时提示:org.openqa.selenium.SessionNotCreatedException: A new session could not be created. (Original error: Command failed:java.util.zip.ZipException: error in opening zip file at java.util.zip.ZipFile.open(Native Method) at java.util.zip.ZipFile.(Unknown Source) at java.util.zip.ZipFile.(Unknown Source) at java.util.jar.JarFile.(Unknown Source) at java.util.jar.JarFile.(Unk
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度哈尔滨市木兰县“丁香人才周”(春季)事业单位引才招聘76人考前自测高频考点模拟试题附答案详解(突破训练)
- 2025年河北石家庄工程职业学院招聘专任教师56名考前自测高频考点模拟试题附答案详解(突破训练)
- 2025年池州市贵池区事业单位公开招聘67人模拟试卷带答案详解
- 2025年甘肃省大数据中心招聘工作人员模拟试卷及参考答案详解一套
- 2025年淮北濉溪博之雅餐饮管理有限公司招聘35人笔试参考题库附带答案详解
- Unit 1 Growing up教学设计小学英语六年级上册牛津上海版(深圳用)
- 第16课 会说话的手(一)(教学设计)苏少版美术四年级上册
- 基金公司工作总结(5篇)
- 新年第一天上班公司领导讲话稿
- 3.2 代数式的概念 说课稿苏科版数学七年级上册
- 《研究生入学教育》课件
- 汽车行业中的环境保护与可持续发展
- 打起手鼓唱起歌混声合唱简谱
- 空调安装免责协议
- QGW 201175-2019-金风陆上风力发电机组 塔架通用防腐技术规范
- 老友记第一季字幕
- 输电线路风偏计算基本方法
- 骨科概论课件
- 第5章光电成像系统
- GB/T 9117-2010带颈承插焊钢制管法兰
- GB/T 5455-2014纺织品燃烧性能垂直方向损毁长度、阴燃和续燃时间的测定
评论
0/150
提交评论