原文链接:http://blog.csdn.net/bear_w/article/details/50345283
  • 1. 建立session时常用命令:
  1. DesiredCapabilities cap = new DesiredCapabilities();
  2. cap.SetCapability("browserName", ""); // web 浏览器名称('Safari' ,'Chrome'等)。如果对应用进行自动化测试,这个关键字的值应为空。
  3. cap.SetCapability("platformName", "Android");//你要测试的手机操作系统
  4. cap.SetCapability("platformVersion", "4.4");//手机操作系统版本
  5. cap.SetCapability("automationName", "selendroid"); //你想使用的自动化测试引擎:Appium (默认) 或 Selendroid
  6. cap.SetCapability("deviceName", " Android Emulator"); //使用的手机类型或模拟器类型,真机时输入Android Emulator或者手机型号
  7. cap.SetCapability("udid", udid); //连接的物理设备的唯一设备标识,Android可以不设置
  8. cap.SetCapability("newCommandTimeout", "300"); //设置收到下一条命令的超时时间,超时appium会自动关闭session ,默认60秒
  9. cap.SetCapability("unicodeKeyboard", "True");//支持中文输入,会自动安装Unicode 输入法。默认值为 false
  10. cap.SetCapability("resetKeyboard", "True"); //在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重置输入法到原有状态
  11. cap.SetCapability("'app'", "D:\\AndroidAutomation\\AndroidAutoTest\\app\\zhongchou.apk"); //未安装应用时,设置app的路径
  12. //手机已安装app,直接从手机启动app,上面路径不设置
  13. cap.SetCapability("appPackage", "com.nbbank"); //你要启动的Android 应用对应的Activity名称|比如`MainActivity`, `.Settings`|
  14. cap.SetCapability("appActivity", "com.nbbank.ui.ActivityShow"); //你想运行的Android应用的包名
  15. cap.SetCapability("appWaitActivity", "com.nbbank.ui.ActivityLogo"); //你想要等待启动的Android Activity名称|比如`SplashActivity`|
  16. Uri serverUri = new Uri("http://127.0.0.1:4723/wd/hub");
  17. driver = new AndroidDriver<IWebElement>(serverUri, cap, TimeSpan.FromSeconds(180));

更多详细查看官网:https://github.com/appium/appium/blob/master/docs/cn/writing-running-appium/caps.cn.md

  • 2. driver常用方法及注意事项

1) 常用方法:

  1. driver.HideKeyboard();//隐藏键盘
  2. driver.BackgroundApp(60);//60秒后把当前应用放到后台去
  3. driver.LockDevice(3); //锁定屏幕
  4. //在当前应用中打开一个 activity 或者启动一个新应用并打开一个 activity
  5. driver.StartActivity("com.iwobanas.screenrecorder.pro", "com.iwobanas.screenrecorder.RecorderActivity");
  6. driver.OpenNotifications();//打开下拉通知栏 只能在 Android 上使用
  7. driver.IsAppInstalled("com.example.android.apis-");//检查应用是否已经安装
  8. driver.InstallApp("path/to/my.apk");//安装应用到设备中去
  9. driver.RemoveApp("com.example.android.apis");//从设备中删除一个应用
  10. driver.ShakeDevice();//模拟设备摇晃
  11. driver.CloseApp();//关闭应用
  12. driver.LaunchApp();//根据服务关键字 (desired capabilities) 启动会话 (session) 。请注意这必须在设定 autoLaunch=false 关键字时才能生效。这不是用于启动指定的 app/activities
  13. driver.ResetApp();//应用重置
  14. driver.GetContexts();//列出所有的可用上下文
  15. driver.GetContext();//列出当前上下文
  16. driver.SetContext("name");//将上下文切换到默认上下文
  17. driver.GetAppStrings();//获取应用的字符串
  18. driver.KeyEvent(176);//给设备发送一个按键事件:keycode
  19. driver.GetCurrentActivity();//获取当前 activity。只能在 Android 上使用
  20. //driver.Pinch(25, 25);//捏屏幕 (双指往内移动来缩小屏幕)
  21. //driver.Zoom(100, 200);//放大屏幕 (双指往外移动来放大屏幕)
  22. driver.PullFile("Library/AddressBook/AddressBook.sqlitedb");//从设备中拉出文件
  23. driver.PushFile("/data/local/tmp/file.txt", "some data for the file");//推送文件到设备中去
  24. driver.FindElement(By.Name(""));
  25. driver.FindElementById("id");
  26. driver.FindElementByName("text");
  27. driver.FindElementByXPath("//*[@name='62']");

2) 注意事项:
使用driver.Sendkeys(string str)向文本框输入内容前,最好先element.Click( )一下,否则某些情况下,输入的内容会请不掉,文本框提示的内容也会在 输入的文本前显示出来。sendkey方法在发送数据之前会清空一下文本框,一般不需要Clear,如前面的情况Clear后仍是存在的,click后正常

  • 3. 等待页面加载策略:

1) 显性等待:调用selenium的方法, 需要添加WebDriver.Support引用
显性等待是指在代码进行下一步操作之前等待某一个条件的发生。最不好的情况是使用Thread.sleep()去设置一段确认的时间去等待。但为什么说最不好呢?因为一个元素的加载时间有长有短,你在设置sleep的时间之前要自己把握长短,太短容易超时,太长浪费时间。selenium webdriver提供了一些方法帮助我们等待正好需要等待的时间

  1. WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
  2. element = wait.Until<IWebElement>((d) =>
  3. {
  4. return driver.FindElement(By.Id("userName"));
  5. });

2) 隐性等待:设置时间不易过长,设置为500或1000即可
隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉WebDriver查询Dom一定时间。默认值是0,但是设置之后,这个时间将在WebDriver对象实例整个生命周期都起作用。

  1. driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1));
  • 4. drive.KeyEvent(int )的使用: 可使用KeyEvent发送键盘数据,比如退格,Enter键等
  1. driver.KeyEvent(3); //KEYCODE_HOME 按键Home 3
  2. driver.KeyEvent(26); //KEYCODE_POWER 电源键 26
  3. driver.KeyEvent(67); //KEYCODE_DEL 退格键 67
  4. driver.KeyEvent(66); //KEYCODE_ENTER 回车键
  5. driver.KeyEvent(122); //KEYCODE_MOVE_HOME 光标移动到开始
  6. driver.KeyEvent(123); //KEYCODE_MOVE_END 光标移动到末尾
  • 5. 坐标操作

    为防止不同手机分辨率不同带来的影响,要避免使用固定的坐标,可以用以下方式获取元素的坐标

  1. double Screen_X = driver.Manage().Window.Size.Width;//获取手机屏幕宽度
  2. double Screen_Y = driver.Manage().Window.Size.Height;//获取手机屏幕高度
  3. double startX = element.Location.X; //获取元素的起点坐标,即元素最左上角点的横坐标
  4. double startY = element.Location.Y; //获取元素的起点坐标,即元素最左上角点的纵坐标
  5. double elementWidth = element.Size.Width; //获取元素的宽度
  6. double elementHight = element.Size.Height; //获取元素的宽度

在封装“滑动”、“ TouchAction”等操作时可以用以上方法来获取坐标进行操作。

示例:分装两个元素之间的滑动

  1. IWebElement elmentA = null;
  2. IWebElement elmentB = null;
  3. int startX = 0, startY = 0, endX = 0, endY = 0;
  4. int duration=0,time=0;
  5. /// <summary>
  6. /// 从元素A的位置滑动到元素B的位置
  7. /// </summary>
  8. /// <param name="A">元素A的名称</param>
  9. /// <param name="B">元素B的名称</param>
  10. /// <param name="sDuration">滑动持续时间</param>
  11. /// <param name="sTime">滑动次数</param>
  12. public void SwipeAToB(string A, string B,string sDuration,string sTime)
  13. {
  14. startX = elmentA.Location.X + elmentA.Size.Width / 2; //元素A的中心横坐标
  15. startY = elmentA.Location.Y + elmentA.Size.Height / 2; //元素A的中心纵坐标
  16. endX = elmentB.Location.X + elmentB.Size.Width / 2; //元素B的中心横坐标
  17. endY = elmentB.Location.Y + elmentB.Size.Height / 2; //元素B的中心纵坐标
  18. duration = string.IsNullOrEmpty(sDuration) ? 1500 : int.Parse(sDuration); //持续时间为空时,默认设置为1500毫秒
  19. time = string.IsNullOrEmpty(sTime) ? 1500 : int.Parse(sTime); //滑动次数为空时,默认设置为滑动1次
  20. for (int i = 0; i < time; i++)
  21. {
  22. driver.Swipe(startX, startY, endX, endY, duration);
  23. }
  24. }

注意:element.Loaction和element.Size,每次获取时都会重新去手机里获取,为节省时间如果有获取相同值的,建议储存成变量。

  • 6. 取消重新安装unlock和setting

注销如下代码:

Appium\node_modules\appium\lib\devices\Android\android.js

  1. async.series([
  2. this.initJavaVersion.bind(this),
  3. this.initAdb.bind(this),
  4. this.packageAndLaunchActivityFromManifest.bind(this),
  5. this.initUiautomator.bind(this),
  6. this.prepareDevice.bind(this),
  7. this.checkApiLevel.bind(this),
  8. this.pushStrings.bind(this),
  9. this.processFromManifest.bind(this),
  10. this.uninstallApp.bind(this),
  11. this.installAppForTest.bind(this),
  12. this.forwardPort.bind(this),
  13. this.pushAppium.bind(this),
  14. this.initUnicode.bind(this),
  15. // DO NOT push settings app and unlock app
  16. //this.pushSettingsApp.bind(this),
  17. //this.pushUnlock.bind(this),
  18. function (cb) {this.uiautomator.start(cb);}.bind(this),
  19. this.wakeUp.bind(this),
  20. this.unlock.bind(this),
  21. this.getDataDir.bind(this),
  22. this.setupCompressedLayoutHierarchy.bind(this),
  23. this.startAppUnderTest.bind(this),
  24. this.initAutoWebview.bind(this),
  25. this.setActualCapabilities.bind(this)
  26. ], function (err) {

appium的几点总结的更多相关文章

  1. Appium移动自动化框架

    引言:Appium 是一个移动端自动化测试开源工具,可以针对不同的平台用一套API来编写测试用例.本文对Appium自动化测试框架的功能进行了概括. 本文选自<软件自动化测试开发>. Ap ...

  2. appium+robotframework环境搭建

    appium+robotframework环境搭建步骤(Windows系统的appium自动化测试,只适用于测试安卓机:ios机需要在mac搭建appium环境后测试) 搭建步骤,共分为3部分: 一. ...

  3. Appium python API 总结

    Appium python api 根据testerhome的文章,再补充一些文章里面没有提及的API [TOC] [1]find element driver 的方法 注意:这几个方法只能通过sel ...

  4. Appium scroll 滑动查找

    首先看uiautomator如何实现滑动查找 UiScrollable scrollView = new UiScrollable(new UiSelector().className("a ...

  5. Appium+python的一个简单完整的用例

    最近一直在忙,终于有时间来整理一下,传一个简单的用例,运行之后可以看到用例的报告,希望对大家有帮助. HTMLTestRunner这个包网上有很多,大家可以自己下载. 1 import unittes ...

  6. Appium环境搭建+cordova

    1.安装JDK 配置JAVA_HOME(变量值为jdk的安装目录)以及Path path值如下: 验证是否生效 2.安装node.js 选择适合自己的版本官网直接下载https://nodejs.or ...

  7. Appium简单测试用例

    工程目录如下: 封装初始化androiddriver 方法 import org.openqa.selenium.remote.DesiredCapabilities; import java.io. ...

  8. appium常用方法整理

    1.相对坐标解锁九宫格 应用场景 QQ解锁屏幕如上,可见九个按键在同一个View下面,要实现解锁,用press   moveTo  release  perform方法 实现代码如下: WebElem ...

  9. appium 滑动

    前些日子,配置好了appium测试环境,至于环境怎么搭建,参考:http://www.cnblogs.com/tobecrazy/p/4562199.html   知乎Android客户端登陆:htt ...

  10. Appium 三种wait方法(appium 学习之改造轮子)

    前些日子,配置好了appium测试环境,至于环境怎么搭建,参考:http://www.cnblogs.com/tobecrazy/p/4562199.html   知乎Android客户端登陆:htt ...

随机推荐

  1. qlikview 扩展插件制作教程-EchartsGeoMap

    效果图   显示效果和echarts官方demo一样,运行速度尚可. 第一次写博客,排版很渣以后慢慢改进. 基础知识 以EchartsGeoMap为例,讲一下怎么制作一个基础的QlikView Ext ...

  2. Windows 10(64位)配置Caffe运行环境的基本流程

    最新博客地址已搬家到: http://blog.csdn.net/zzlyw/article/details/53215148

  3. shell 脚本中的运算

    #!/bin/bash read -p "please Insert two integer values: " a b if [ ! -n "$a" -o ! ...

  4. Redis Cluster 介绍与使用

    Redis Cluster 功能特性 Redis 集群是分布式的redis 实现,具有以下特性: 1. 高可用性与可线性扩张到1000个节点 2. 数据自动路由到多个节点 3. 节点间数据共享 4. ...

  5. nginx配置为windows服务中的坑

    网上搜索“nginx 配置为windows服务”,很容易搜索到使用windows server warpper来配置,于是按照网上的方法我从github上的链接下载了1.17版本,前面都很顺利,很容易 ...

  6. 9个基于Java的搜索引擎框架

    在这个信息相当繁杂的互联网时代,我们已经学会了如何利用搜索引擎这个强大的利器来找寻目标信息,比如你会在Google上搜索情人节如何讨女朋友欢心,你也会在百度上寻找正规的整容医疗机构(尽管有很大一部分广 ...

  7. 让“是男人就下到100层”在Android平台上跑起来

    原工程:https://github.com/jeekun/DownFloors 移植后的代码:HelloCpp.zip 移植后的APK:HelloCpp.apk 说明:(cocos2d-x版本是“ ...

  8. 修改Glassfish默认密码,并允许远程登录

    修改默认密码 1.打开命令提示窗口,进入 glassfish/bin 目录: 2.输入命令 asadmin 进入管理模式: 接着输入: change-admin-password 注意默认密码为空,要 ...

  9. sgu 240 Runaway (spfa)

    题意:N点M边的无向图,边上有线性不下降的温度,给固定入口S,有E个出口.逃出去,使最大承受温度最小.输出该温度,若该温度超过H,输出-1. 羞涩的题意 显然N*H的复杂度dp[n][h]表示到达n最 ...

  10. Nodejs实现简单的反向代理

    var http = require('http'), httpProxy = require('http-proxy'); // 新建一个代理 Proxy Server 对象 var proxy = ...