//启动

   
//   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
原博:http://www.51testing.com/html/44/15020244-1435135.html

转载于:https://www.cnblogs.com/fgzhang/p/6956065.html

Appium 常用操作相关推荐

  1. Appium常用操作及H5页面元素定位

    目录 1.去登录考研帮系统 2.高级手势操作 1.tap() 2.移动 move_to 3.滑屏操作 3.多点触控 multiAction 4.原生嵌套H5 1.去登录考研帮系统 import tim ...

  2. Appium基础操作

    1.uiautomatorviewer 1.手机控件查看工具uiautomatorviewer 简介:用来扫描和分析Android应用程序的UI空间的工具 2.如何使用 1.进入SDK目录下的tool ...

  3. TensorFlow常用操作:代码示例

    1,定义矩阵代码示例: import tensorflow as tftf.zeros([3,4]) #定义3行4列元素均为0的矩阵tensor=tf.constant([1,2,3,4])#定义一维 ...

  4. Ubuntu 常用操作

    Ubuntu常用操作 外观操作 修改应用icon图标 终端美化 内存管理 内存查询 分区管理 日志清理 操作执行 自动执行多条命令 外观操作 修改应用icon图标 在/usr/share/applic ...

  5. IOS沙盒Files目录说明和常用操作

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...

  6. 用Python轻松搞定Excel中的20个常用操作

    来源 |早起Python(ID: zaoqi-python) Excel与Python都是数据分析中常用的工具,本文将使用动态图(Excel)+代码(Python)的方式来演示这两种工具是如何实现数据 ...

  7. python和R对dataframe的常用操作的差异:head、tail、shape、dim、nrow、ncol、descirbe、summary、str

    python和R对dataframe的常用操作的差异:head.tail.shape.dim.nrow.ncol.descirbe.summary.str # python df.head() # R ...

  8. 【node】Sequelize常用操作、基本增删改查

    [node]Sequelize常用操作.基本增删改查 sequelize初始化 先初始化一个数据库实例 再初始化一个model实例 sequelize的数据类型 基本增删改查的写法 SELECT * ...

  9. JavaScript:对Object对象的一些常用操作总结

    JavaScript对Object对象的一些常用操作总结. 一.Object.assign() 1.可以用作对象的复制 var obj = { a: 1 }; var copy = Object.as ...

  10. ubuntu的学习教程(常用操作)

    摘要 最近在学习linux,把自己学习过程中遇到的常用操作以及一些有助于理解的内容记录下来.我主要用的是ubuntu系统 命令提示符 '~' 这个是指用户的家目录,用户分为root用户和普通用户,ro ...

最新文章

  1. UVA 11259 Coin Changing Again
  2. Java实现算法导论中Rabin-Karp字符串匹配算法
  3. python编写IP地址与十进制IP转换脚本
  4. python -c带来的惊喜
  5. 想了解推荐系统最新研究进展?请收好这16篇论文
  6. Debian Squeeze AMD64安装Oracle 10g x86_64 10.2.0....
  7. LeetCode Permutations
  8. linux 磁盘查看方式
  9. 计算字符串距离(信息学奥赛一本通-T1298)
  10. JAVA能做flash游戏吗_FLASH+JAVA开发实时网络游戏 (转:闪客帝国)
  11. 父子域+主辅域控的搭建
  12. NodeJS服务器退出:完成任务,优雅退出
  13. Ynoi(5/35)
  14. 使用nltk库查找英文同义词和反义词
  15. reactos回顾总结(一)reactos源码编译
  16. 怎么教你如何查看电脑的蓝牙版本【解决方案】
  17. 《NAO机器人程序设计》---第四章 运动控制
  18. 近红外超扫描 | 群际冲突会影响脑间同步
  19. 正常人白手起家挣一千万需要多久?
  20. 嵌入式操作系统和RTOS(实时操作系统)介绍。

热门文章

  1. LINUX SHELL使用变量控制循环
  2. 汉语中的通用量词:个,块
  3. 模板(范型)的安全数组C++代码
  4. 管理感悟:不要做自己想做的事情
  5. eclipse Unable to build: the file dx.jar was not loaded from the SDK folder的解决办法
  6. C++/CLI C#字符串转为C++字符串正确写法
  7. php 检查txt中全角大写字母的个数
  8. java 性能框架_Java Fork Join 框架(四)性能
  9. 去除标题_1688如何通过黄金标题引爆流量?
  10. fedora html 编辑器,分享|在 Fedora 上使用 Pitivi 编辑视频