文档章节

Appium日常笔记 API使用

c
 children009
发布于 2016/11/10 11:34
字数 1645
阅读 284
收藏 7
点赞 0
评论 0
1,启动Android 设备:
 
   //启动
 
    
 
//   set up appium  
 
//   File classpathRoot = new File(System.getProperty("user.dir"));  
 
//   File appDir = new File(classpathRoot, "apps");  
 
//   File app = new File(appDir, "ContactManager.apk");  
 
   DesiredCapabilities capabilities = new DesiredCapabilities(); 
 
       capabilities.setCapability("device","Android");
 
//       capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
 
       capabilities.setCapability("deviceName", "xiaomi-mi_3-02214788");//小米
 
//       capabilities.setCapability("deviceName", "52c7c049");//三星
 
//       capabilities.setCapability("deviceName", "614ad249");//红米
 
       capabilities.setCapability("platformVersion", "4.4.4");  
 
       capabilities.setCapability("platformName", "Android");  
 
//       capabilities.setCapability("app", app.getAbsolutePath());
 
       capabilities.setCapability("appPackage", "com.tencent.mm");  
 
       capabilities.setCapability("appActivity", "com.tencent.mm.ui.LauncherUI");  
 
       capabilities.setCapability("unicodeKeyboard", "True");  
 
       capabilities.setCapability("resetKeyboard", "True");  
 
       driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
 
 
 
 
 
启动IOS设备:
 
 
 
 
 
DesiredCapabilities capabilities = new DesiredCapabilities();
 
//capabilities.setCapability(CapabilityType.BROWSER_NAME, "ios");
 
capabilities.setCapability(CapabilityType.VERSION, "8.1");
 
capabilities.setCapability(CapabilityType.PLATFORM, "Mac");
 
//capabilities.setCapability("device", "iPhone Simulator");
 
//capabilities.setCapability("app", "safai");
 
capabilities.setCapability("deviceName", "pohoto");
 
     capabilities.setCapability("platformName", "ios");
 
driver = new RemoteWebDriver(new URL("http://0.0.0.0:4723/wd/hub"), capabilities);
 
 
 
注:Appium内还需要配置一些东西,UDID/BundleID/Force Driver
 
 
 
寻找元素超时时间:
 
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
 
打印整个页面的元素:System.out.print(driver.getPageSource());
 
获取当前时间并截图,命名:
 
public static String getScreen(){
 
String fileRoute="//liyu/testing/test/";
 
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd-HH-mm");
 
String picname=fileRoute+df.format(new Date()).toString()+".png";
 
//picname=picname.replaceAll(":", "-");
 
//picname=picname.replaceAll(" ", "-");
 
       File screen = driver.getScreenshotAs(OutputType.FILE);
 
       System.out.println(picname);
 
       File screenFile = new File(picname);
 
       try {
 
           FileUtils.copyFile(screen, screenFile); 
 
           String time=df.format(new Date()).toString();
 
           System.out.println("当前时间"+time);
 
           return time;
 
       } catch (IOException e) {
 
           e.printStackTrace();
 
       }
 
return null;
 
       
 
}
 
发送邮件:HTML/TXT(要把图片放到IIS路径拼接url)
 
 
 
 
 
public void mail() {
 
String value2="微信**系统: 本次**时间:"+getScreen();
 
String Value="<img src=\"http://172.17.6.134:88/test/"+getScreen()+".png\">";
 
System.out.print(Value);
 
String smtpHost ="172.17.1.23";
 
String from = "liyu@yiguo.com";
 
String to = "liyu@yiguo.com";
 
String subject = value2; //subject javamail自动转码
 
StringBuffer theMessage = new StringBuffer();
 
theMessage.append("<h2><font color=red>**截图乳腺:</font></h2>");
 
theMessage.append("<hr>");
 
theMessage.append(Value);
 
try {
 
Mail.sendMessage(smtpHost, from, to, subject, theMessage.toString());
 
}
 
catch (javax.mail.MessagingException exc) {
 
exc.printStackTrace();
 
}
 
catch (java.io.UnsupportedEncodingException exc) {
 
exc.printStackTrace();
 
}
 
}
 
public static void sendMessage(String smtpHost,String from, String to, String subject, String messageText)throws MessagingException,java.io.UnsupportedEncodingException
 
{
 
// Step  :  Configure the mail session
 
System.out.println("Configuring mail session for: " + smtpHost);
 
java.util.Properties props = new java.util.Properties();
 
props.setProperty("mail.smtp.auth", "true");//指定是否需要SMTP验证
 
props.setProperty("mail.smtp.host", smtpHost);//指定SMTP服务器
 
props.put("mail.transport.protocol", "smtp");
 
Session mailSession = Session.getDefaultInstance(props);
 
mailSession.setDebug(true);//是否在控制台显示debug信息
 
// Step  :  Construct the message
 
System.out.println("Constructing message -  from=" + from + "  to=" + to);
 
InternetAddress fromAddress = new InternetAddress(from);
 
InternetAddress toAddress = new InternetAddress(to);
 
MimeMessage testMessage = new MimeMessage(mailSession);
 
testMessage.setFrom(fromAddress);
 
testMessage.addRecipient(javax.mail.Message.RecipientType.TO, toAddress);
 
testMessage.setSentDate(new java.util.Date());
 
testMessage.setSubject(MimeUtility.encodeText(subject,"gb2312","B"));
 
testMessage.setContent(messageText, "text/html;charset=gb2312");
 
System.out.println("Message constructed");
 
// Step  :  Now send the message
 
Transport transport = mailSession.getTransport("smtp");
 
transport.connect(smtpHost, "liyu@yiguo.com", "5201314");
 
transport.sendMessage(testMessage, testMessage.getAllRecipients());
 
transport.close();
 
System.out.println("Message sent!");
 
}
 
 
 
 
 
 
 
APP内上滑:driver.swipe(250, 300, 250, 1400, 0); 
 
APP内下滑:     driver.swipe(250,1400, 250,300 , 0); 
 
 
 
//driver.navigate().forward(); // 前进
 
//driver.navigate().back(); // 后退
 
driver.navigate().refresh(); // 刷新
 
String 字符串截取转成int:
 
String getScreen="2015-02-05-16-44";
 
String Value="2015-02-05-16-49";
 
// int index= getScreen.substring(13, 1);
 
    String getScreen1 = getScreen.substring(14, 16);
 
    String  Value2 = Value.substring(14, 16);
 
System.out.print(getScreen1);
 
System.out.print(Value2);
 
    Integer.parseInt(getScreen1);
 
    Integer.parseInt(Value2);    
 
int sum =Integer.parseInt(Value2) -Integer.parseInt(getScreen1); 
 
System.out.print(sum);
 
 
 
 动作Action:
 
 
 
/***
 
* 切换WEB页面查找元素
 
*/
 
public static void switchtoWeb(){
 
try {
 
     Set<String> contextNames = demotestcase.driver.getContextHandles();
 
     for (String contextName : contextNames) {
 
       // 用于返回被测app是NATIVE_APP还是WEBVIEW,如果两者都有就是混合型App
 
       if(contextName.contains("WEBVIEW")||contextName.contains("webview")){
 
       demotestcase.driver.context(contextName);
 
       System.out.println("跳转到web页 开始操作web页面"); 
 
       }
 
     }
 
}catch (Exception e) {
 
     e.printStackTrace();
 
}
 
}
 
/***
 
* 上滑1/4屏幕
 
*/
 
public static void slideUP(){
 
int x=demotestcase.driver.manage().window().getSize().width;
 
int y=demotestcase.driver.manage().window().getSize().height;
 
demotestcase.driver.swipe(x/2, y/3*2, x/2, y/3*1, 0);
 
}
 
/***
 
* 下滑1/4屏幕
 
*/
 
public static void slideDown(){
 
int x=demotestcase.driver.manage().window().getSize().width;
 
int y=demotestcase.driver.manage().window().getSize().height;
 
demotestcase.driver.swipe(x/2, y/3*1, x/2, y/3*2, 0);
 
}
 
/***
 
* 左滑1/2屏幕
 
*/
 
public static void slideLeft(){
 
int x=demotestcase.driver.manage().window().getSize().width;
 
int y=demotestcase.driver.manage().window().getSize().height;
 
demotestcase.driver.swipe(x/4*3, y/2, x/4*1, y/2, 0);
 
}
 
/***
 
* 右滑1/2屏幕
 
*/
 
public static void slideRight(){
 
int x=demotestcase.driver.manage().window().getSize().width;
 
int y=demotestcase.driver.manage().window().getSize().height;
 
demotestcase.driver.swipe(x/4*1, y/2, x/4*3, y/2, 0);
 
}
 
/***
 
* 特殊上滑
 
* @param 传入从左到右宽度的百分比(1-99之间)
 
*/
 
public static void slideUP(int i){
 
Assert.assertFalse("上滑宽度传入错误", i<=0||i>=100);
 
int x=demotestcase.driver.manage().window().getSize().width;
 
int y=demotestcase.driver.manage().window().getSize().height;
 
demotestcase.driver.swipe(x/10*i, y/3*2, x/10*i, y/3*1, 0);
 
}
 
/***
 
* 特殊下滑
 
* @param 传入从左到右宽度的百分比(1-99之间)
 
*/
 
public static void slideDown(int i){
 
Assert.assertFalse("下滑宽度传入错误", i<=0||i>=100);
 
int x=demotestcase.driver.manage().window().getSize().width;
 
int y=demotestcase.driver.manage().window().getSize().height;
 
demotestcase.driver.swipe(x/10*i, y/3*1, x/10*i, y/3*2, 0);
 
}
 
/***
 
* 特殊左滑
 
* @param 传入从上到下宽度的百分比(1-99之间)
 
*/
 
public static void slideLeft(int i){
 
Assert.assertFalse("左滑宽度传入错误", i<=0||i>=100);
 
int x=demotestcase.driver.manage().window().getSize().width;
 
int y=demotestcase.driver.manage().window().getSize().height;
 
demotestcase.driver.swipe(x/4*3, y/10*i, x/4*2, y/10*i, 0);
 
}
 
/***
 
* 特殊右滑
 
* @param 传入从上到下宽度的百分比(1-99之间)
 
*/
 
public static void slideRight(int i){
 
Assert.assertFalse("左滑宽度传入错误", i<=0||i>=100);
 
int x=demotestcase.driver.manage().window().getSize().width;
 
int y=demotestcase.driver.manage().window().getSize().height;
 
demotestcase.driver.swipe(x/4*2, y/10*i, x/4*3, y/10*i, 0);
 
}
 
/***
 
* xpath根据content-desc查找元素
 
* @param view的类型
 
* @param content-desc 的内容
 
* @return
 
*/
 
public static WebElement getViewbyXathwithcontentdesc(String view,String name){
 
return demotestcase.driver.findElementByXPath("//"+view+"[contains(@content-desc,'"+name+"')]");
 
}
 
/***
 
* xpath根据text查找元素
 
* @param view的类型
 
* @param text的内容
 
* @return
 
*/
 
public static WebElement getViewbyXathwithtext(String view,String name){
 
return demotestcase.driver.findElementByXPath("//"+view+"[contains(@text,'"+name+"')]");
 
}
 
/***
 
* 截图 文件名: 年月日时分秒
 
*/
 
public static String getScreen(){
 
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
 
String picname=finalElement.phoneScreens+df.format(new Date()).toString()+".png";
 
//picname=picname.replaceAll(":", "-");
 
//picname=picname.replaceAll(" ", "-");
 
        File screen = demotestcase.driver.getScreenshotAs(OutputType.FILE);
 
        System.out.println(picname);
 
        File screenFile = new File(picname);
 
        try {
 
            FileUtils.copyFile(screen, screenFile); 
 
        } catch (IOException e) {
 
            e.printStackTrace();
 
        }
 
return picname;
 
}
 
/***
 
* 截图 文件名: 内容-年月日时分秒
 
*/
 
public static String getScreen(String name){
 
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
 
String picname=finalElement.phoneScreens+name+df.format(new Date()).toString()+".png";
 
        File screen = demotestcase.driver.getScreenshotAs(OutputType.FILE);
 
        System.out.println(picname);
 
        File screenFile = new File(picname);
 
        try {
 
            FileUtils.copyFile(screen, screenFile); 
 
        } catch (IOException e) {
 
            e.printStackTrace();
 
        }
 
        return picname;
 
}
 
 
 
/***
 
* 检查网络
 
* @return 是否正常
 
*/
 
public static boolean checkNet(){
 
String text=demotestcase.driver.getNetworkConnection().toString();
 
if(text.contains("Data: true"))
 
return true;
 
else
 
return false;
 
}
 
 
 
/***
 
* 根据UIautomator底层方法得到对应desc的view
 
* @param desc名
 
* @return View
 
*/
 
public static WebElement getViewbyUidesc(String name){
 
return demotestcase.driver.findElementByAndroidUIAutomator("new UiSelector().descriptionContains(\""+name+"\")");
 
}
 
/***
 
* 根据UIautomator底层方法得到对应text的view
 
* @param text名
 
* @return View
 
*/
 
public static WebElement getViewbyUitext(String name){
 
return demotestcase.driver.findElementByAndroidUIAutomator("new UiSelector().textContains(\""+name+"\")");
 
}
 
/***
 
* 绝对坐标 传入长宽的像素点
 
* @param 宽度从左到右的像素点
 
* @param 长度从上到下的像素点
 
*/
 
public static void clickScreen(int i,int j){
 
int x=demotestcase.driver.manage().window().getSize().width;
 
int y=demotestcase.driver.manage().window().getSize().height;
 
demotestcase.driver.tap(1, i, j, 200);
 
}
 
/***
 
* 相对坐标 传入长宽的百分比
 
* @param 宽度从左到右的百分比
 
* @param 长度从上到下的百分比
 
*/
 
public static void clickScreen100(int i,int j){
 
int x=demotestcase.driver.manage().window().getSize().width;
 
int y=demotestcase.driver.manage().window().getSize().height;
 
demotestcase.driver.tap(1, x*i/100, y*j/100, 200);
 
}
 
/***
 
* log记录
 
* @param 图片保存路径
 
* @param Exception参数
 
* @param AssertionError参数
 
* @param 测试用例名
 
*/
 
public static void getlog(String text, Exception error, AssertionError assertError, String testname){
 
SimpleDateFormat df = new SimpleDateFormat("MM-dd-HH-mm");
 
System.out.println("当前时间"+df.format(new Date()));
 
String filename=finalElement.errorfile+testname+"-"+df.format(new Date()).toString()+".txt";
 
File file=new File(finalElement.errorfile);
 
if(!file.exists())
 
file.mkdirs();
 
try {
 
   File f = new File(filename);
 
   if (!f.exists()) 
 
   f.createNewFile();
 
FileWriter fw = new FileWriter(f, true);
 
PrintWriter pw = new PrintWriter(fw);
 
pw.append(testname+" 测试failed\r\n");
 
pw.append("截图保存为:"+text+"\r\n");
 
try{
 
pw.append("eclipse报错为:\n"+error.toString()+"\r\n");
 
error.printStackTrace(pw);
 
} catch (Exception e){}
 
try{
 
pw.append("断言报错为:"+assertError.toString()+"\r\n");
 
assertError.printStackTrace(pw);
 
} catch (Exception e){}  
 
pw.flush();
 
pw.close();
 
file=new File(finalElement.errorlog);
 
if(!file.exists())
 
file.mkdirs();
 
String cmd="cmd /c \"adb logcat -d  *:E *:S |grep \"com.yiguo.app\" >"+finalElement.errorlog+testname+"-"+df.format(new Date()).toString()+".txt\"";
 
//System.out.println(cmd);
 
Runtime.getRuntime().exec(cmd);
 
} catch (Exception e) {
 
e.printStackTrace();
 
}
 
}
 
 
 
直接文本点击:
 
driver.findElementByAndroidUIAutomator("new UiSelector().textContains(\"发现\")").click();
 
    
 
   driver.findElementByAndroidUIAutomator("new UiSelector().textContains(\"朋友圈\")").click();
 
 
 
访问远程共享文件夹bat
 
net use \\192.168.100.170 "5201314" /user:"office\yu.li"
 
 
 
copy \\192.168.100.170\Builds\FanliApp_Android\4.3\4.3.1.4\FanliAndroid-release-fanli.apk    D:\Apk\fanli.apk

 

© 著作权归作者所有

共有 人打赏支持
c
粉丝 1
博文 18
码字总数 6231
作品 0
广州
5个最佳的Android测试框架

谷歌的Android生态系统正在不断地迅速扩张。有证据表明,新的移动OEM正在攻陷世界的每一个角落,不同的屏幕尺寸、ROM /固件、芯片组以及等等等等,层出不穷。于是乎,对于Android开发人员而言...

IT追寻者 ⋅ 2016/06/21 ⋅ 0

Appium基础认识

本文介绍了Appium相关的一些工具的概念以及彼此的关系,方便对appium有一个总体的认识。内容包括了JUnit,TestNG简介以及Appium的基本工作原理。 自动化工具的比较: 备注:由于需要在AWS D...

一剑围城 ⋅ 2017/09/26 ⋅ 0

Appium自动化测试系列1 - Appium环境的安装与配置

之前一直使用Robotium做为Android App测试框架的底层基础,受限于跨进程,以及控件加载的一些限制,很多特殊场景无法覆盖,决定尝试久闻的Appium(它也差不多成熟了),顺便做个笔记,方便其...

冬吃萝卜 ⋅ 2015/01/27 ⋅ 0

appium 相关内容

appium简明教程(转):http://www.yangyanxing.com/?p=1266 appium使用入门:http://wenku.baidu.com/link?url=J9fpuKe0NPfgtaL4Pgsxog9FhunEYfbq7swk4GvS578f3Outy-19mtLVokVKQ1aKfi2ymrkAZ......

智能小松鼠 ⋅ 2015/10/02 ⋅ 0

Appium移动自动化框架

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

zouhui1003it ⋅ 01/05 ⋅ 0

Android 测试工具集01

Appium是一个支持原生,混合和移动web apps的开源的跨平台测试框架工具。 ANDROID依赖 Android SDK API >= 17 (Additional features require 18) Appium支持OS X上的Android, Linux和Windows...

wei-spring ⋅ 2015/02/12 ⋅ 0

Appium的ios自动化测试详解

Appium作为一个开源的、跨平台的自动化测试工具,适用于测试原生或混合型移动App。 Appium的核心是一个web服务器,他使用WebDriverjson wire协议,来驱动系统的UIAutomation库。WebDriver J...

fiawfo ⋅ 2016/12/12 ⋅ 0

Mac Appium 环境配置

一、 安装JDK (1) 安装1.8版本的JDK,下载链接: https://pan.baidu.com/s/1sloMOCt 密码: nw72(已过期) 可以到官网下载:http://www.oracle.com/technetwork/cn/java/javase/downloads/in...

awesome@qa ⋅ 05/16 ⋅ 0

Appium 控件定位链接整理(appiumdriver)

Appium基于安卓的各种FindElement的控件定位方法实践和建议: http://doc.okbase.net/zhubaitian/archive/103376.html Appium Driver API: http://javadox.com/io.appium/java-client/1.2.1......

智能小松鼠 ⋅ 2014/12/11 ⋅ 0

移动端自动化测试

移动测试的困难与挑战 移动自动化测试的痛点 1.移动测试的困难与挑战 迭代速度快,测试时间少,无法保证测试覆盖率,准确性不足,问题难追踪. 设备平台多:Android,IOS,Windows Phone 系统版...

SVD ⋅ 2016/11/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

HiSDP —— 高效的C++软件开发平台

目前阿里集团每天有近1000PB的数据是通过LogAgent采集的,为了让LogAgent做到资源占用节省和高效采集,背后是基于HiSDP去构建的。 缘由 当决定采用C++编程语言去开发一个软件时,紧接着所面临...

阿里云云栖社区 ⋅ 3分钟前 ⋅ 0

zookeeper-3.4.12 下载与安装教程

一、zookeeper下载地址 http://mirrors.hust.edu.cn/apache/zookeeper/ 二、启动教程 把压缩包放在指定目录下 第三: 进入 conf文件夹底下 zoo_sample.cfg 文件名改成 zoo.cfg 第四步: 进入b...

泉天下 ⋅ 4分钟前 ⋅ 0

Oracle 中文日期转换

SELECT TO_date('2011年11月11日', 'yy"年"mm"月"dd"日"') FROM DUAL; 1. Oracle无法识别中文格式,所以添加双引号。 2. 后面的格式是指字符串在转换前的格式,而不是指转换后的格式。...

名侦探柯南 ⋅ 5分钟前 ⋅ 0

MySell:API Spring Boot

起步 类目 商品 订单

BeanHo ⋅ 8分钟前 ⋅ 0

Spring方法拦截器MethodInterceptor

参考资料 1、Spring方法拦截器MethodInterceptor 2、Sharding JDBC源码分析-JdbcMethodInvocation类的作用

哎小艾 ⋅ 11分钟前 ⋅ 0

正则表达式

元字符 元字符,又叫字符集,就是用一些特殊符号表示特定种类的字符或位置。 匹配字符 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 匹配...

wangchen1999 ⋅ 11分钟前 ⋅ 0

数据库数据导入Elasticsearch案例分享

基于bboss持久层和bboss elasticsearch客户端实现数据库数据导入es案例分享(支持各种数据库和各种es版本) 1.案例对应的源码 https://gitee.com/bboss/bboss-elastic/blob/master/bboss-el...

bboss ⋅ 12分钟前 ⋅ 0

动手---sbt(2)

参考 https://blog.csdn.net/leishangwen/article/details/46225587 建立一个chisel_max目录,文件内容如后面所述,现在开始执行命令: joe@joe-Aspire-Z3730:/media/sdb4/download/scala$ c......

whoisliang ⋅ 19分钟前 ⋅ 0

纯js实现最简单的文件上传(后台使用MultipartFile)

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>XMLHttpRequest上传文件</title> <script type="text/javascript"> //图片上传 var xhr......

孟飞阳 ⋅ 24分钟前 ⋅ 0

iOS宇宙大战游戏、调试工具、各种动画、AR相册、相机图片编辑等源码

iOS精选源码 日期时间选择器,swift Space Battle 宇宙大战 SpriteKit游戏源码 LLDebugTool - 便捷的IOS调试工具(新增截屏功能) 相机扫描or长按识别二维码、FMDB、键盘动态高度、定位等 动画...

sunnyaigd ⋅ 24分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部