Appium之Android功能脚本

Android功能脚本

注:这里只写了登录和退出功能,以下不提供app的包名,下面我使用的是线上包

准备:1、Eclipse的Java环境;2、Appium环境;3、Android真机一台。

创建一个Maven Project

这里省略了一万个字。。。。。。

修改pom.xml文档:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com</groupId>
  <artifactId>testmobike</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>testmobike</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>
     <dependency>
      <groupId>io.appium</groupId>
      <artifactId>java-client</artifactId>
      <version>5.0.1</version>
    </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.5.2</version>
        </dependency>
  </dependencies>
</project>

连接真机,启动电脑的cmd.exe运行adb命令

查看手机是否连接正常,并查看deviceName:adb shell;exit;adb devices

查看手机里的包名:adb shell;su;cd /data/data;ls    或者   adb shell;pm list package -f

启动Appium

点击放大图标,在Desired Capabilities里设置相关系数

扫描二维码关注公众号,回复: 6017026 查看本文章
  "appPackage": "",
  "appActivity": "",
  "platformName": "android",
  "deviceName": ""

启动后可以相应的录制脚本,这里又省略了一万个字。。。。。。

调试代码

package test2.hejiaqin_login;

import io.appium.java_client.MobileElement;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;

import static org.junit.Assert.assertTrue;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.remote.DesiredCapabilities;

public class hejiaqin3_9 {

	private AndroidDriver driver;

	  @Before
	  public void setUp() throws MalformedURLException {
	    DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
	    File appDir = new File(System.getProperty("user.dir"), "apps");
	    File app = new File(appDir, " 包 ");//包放在apps文件夹里面
	    desiredCapabilities.setCapability("app", app.getAbsolutePath());
	    
	    desiredCapabilities.setCapability("appPackage", " 包名 ");
	    desiredCapabilities.setCapability("appActivity", ".splash.activity.SplashActivity");
	    desiredCapabilities.setCapability("platformName", "android");
	    desiredCapabilities.setCapability("deviceName", "设备标识");//vivoX7
	    desiredCapabilities.setCapability("noReset", "false");
	   // desiredCapabilities.setCapability("unicodeKeyboard", "ture");
	   // desiredCapabilities.setCapability("resetKeyboard", "ture");
	    //desiredCapabilities.setCapability("newCommandTimeout")=30;
	    URL remoteUrl = new URL("http://localhost:4723/wd/hub");

	    driver = new AndroidDriver(remoteUrl, desiredCapabilities);
	  }
	  
	  @After
	  public void tearDown() throws Exception {
	      driver.quit();
	  }
	  
	  public void waittimeout(String s,int type,int timeout) throws InterruptedException  {//等待方式
	      switch(type){
	      case 1:
	    	  while(driver.findElementsById(s).size()==0){
	    		  Thread.sleep(1000);
	    		  timeout--;
	    	    	if(timeout<0){
	    	    		break;
	    	    	}
	    		  }
	          break;
	      case 2:
	    	  while(driver.findElementsByXPath(s).size()==0){
	    		  System.out.println("==="+timeout);
	    		  Thread.sleep(1000);
	    		  timeout--;
	    		  if(timeout<0){
		    		break;
		    	}
	    		  }
	          break;
	      case 3:
	    	  while(driver.findElementsByClassName(s).size()==0){
	    		  Thread.sleep(1000);
	    		  timeout--;
	    		  if(timeout<0){
		    		break;
		    	}
	    		  }
	          break;
	      default:
	    	  while(driver.findElementsByAccessibilityId(s).size()==0){
	    		  Thread.sleep(1000);
	    		  timeout--;
	    		  if(timeout<0){
		    		break;
		    	}
	    		  }
	          break;
	      }
	  }
	
	  @Test
	  public void sampleTest() throws InterruptedException {
			 //滑动功能
		    Thread.sleep(2000);
		    TouchAction action = new TouchAction(driver); 
		   int width = driver.manage().window().getSize().width;
		     int height = driver.manage().window().getSize().height;
		   int x1 =width*7/8;
		    int x2 =width*1/8;

			action.longPress(x1,height/2).moveTo(x2,height/2).release().perform(); 
			Thread.sleep(2000);
			action.longPress(x1,height/2).moveTo(x2,height/2).release().perform();
			Thread.sleep(2000);
			action.longPress(x1,height/2).moveTo(x2,height/2).release().perform();
			Thread.sleep(2000);
		  
		  
		  //driver.findElementById("com.cmri.universalapp:id/go_login").click();//立即进入
		  (new TouchAction(driver)).tap(527, 1758).perform();
		  //assertTrue("ok",driver.findElementById("com.cmri.universalapp:id/switch_login_type").isDisplayed());//找到“切换通行证账号登录”键
		  Thread.sleep(5000);
		  driver.findElementById("com.cmri.universalapp:id/switch_login_type").click();//切换通行证账号登录
		  Thread.sleep(2000);
		    waittimeout("com.cmri.universalapp:id/etPhone",1,30);
		    
		    MobileElement el2 = (MobileElement) driver.findElementById("com.cmri.universalapp:id/etPhone");
		    el2.sendKeys("账号手机号");
		    Thread.sleep(2000);
		    int i=10;
		    while(!el2.getText().toString().replaceAll("\\s*","").equals("账号手机号")){
		    	el2.sendKeys("账号手机号");
		    	Thread.sleep(2000);
		    	i--;
		    	if(i<0){
		    		break;
		    	}
		    }     //输入的用户名去掉空格,换行,制表符之后如果不和150这个值一样,那么就把这个el2设置成150这个值
		  
		    MobileElement elh = (MobileElement) driver.findElementById("com.cmri.universalapp:id/ivShowPassword");
			   elh.click();
		    
		    Thread.sleep(2000);
		    MobileElement el3 = (MobileElement) driver.findElementById("com.cmri.universalapp:id/etPassword");
		    el3.sendKeys("密码");
		    Thread.sleep(2000);
		    int t=10;
		    while(!el3.getText().toString().replaceAll("\\s*","").equals("密码")){
		    	el3.sendKeys("密码");
		    	Thread.sleep(2000);
		    	t--;
		    	if(t<0){
		    		break;
		    	}
		    }
		    
		    MobileElement el4 = (MobileElement) driver.findElementById("com.cmri.universalapp:id/tvLogin");
		    el4.click(); //登录
		    Thread.sleep(2000);
		    
		    //下面去弹窗
	/*	    waittimeout("/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout",2,30);
		    driver.findElementById("com.cmri.universalapp:id/tv_next_step").click();
		    
		    waittimeout("/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout",2,30);
		    driver.findElementById("com.cmri.universalapp:id/tv_next_step").click();
		    
		    waittimeout("/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout",2,30);
		    driver.findElementById("com.cmri.universalapp:id/tv_next_step").click();
		    
		    waittimeout("/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout",2,30);
		    driver.findElementById("com.cmri.universalapp:id/tv_next_step").click();
		    
		    //waittimeout("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.ImageView",2,30);
		    //driver.findElementByXPath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.ImageView").click();
		    Thread.sleep(5000);
		    float a1 = (float) (990.0/1080);	//得出长宽在手机的比例,这里的是 华为P10手机 分辨率是 1080X1920,这样得出比例,换手机也可以实现控件位置。	
		    double b1 = 130.0/1920;
		    int c1 = (int) (a1*width);	
		    int d1 = (int) (b1*height);
		    action.tap(c1,d1).perform();
		    
		    waittimeout("/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.ImageView[1]",2,30);
		    driver.findElementById("com.cmri.universalapp:id/ivCancelDlg").click();//把最后一张图叉了
		  */
		    waittimeout("/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.ImageView[1]",2,30);
		    driver.findElementById("com.cmri.universalapp:id/iv_close").click();//直接X掉跳过

		    //我的-退出
		    waittimeout("com.cmri.universalapp:id/check_box_bottom_tab_mine",1,30);
		    driver.findElementById("com.cmri.universalapp:id/check_box_bottom_tab_mine").click();//我的 按钮
		    Thread.sleep(2000);
		    action.longPress(width*1/2,height*3/4).moveTo(width*1/2,height*1/4).release().perform();
			Thread.sleep(2000);
			waittimeout("com.cmri.universalapp:id/nav_linear_setting",1,30);
		    driver.findElementById("com.cmri.universalapp:id/nav_linear_setting").click();//设置 按钮
		    driver.findElementById("com.cmri.universalapp:id/tvLogout").click();//退出按钮
		    Thread.sleep(2000);
		    driver.findElementById("com.cmri.universalapp:id/dialog_ok_btn").click();//退出登录 按钮
		    Thread.sleep(2000);
  
	  	}
	
} 

这笔记,感觉写了没有营养,后期修改。。。

猜你喜欢

转载自www.cnblogs.com/yuntimer/p/10771588.html