zoukankan      html  css  js  c++  java
  • appium精简教程

    环境配置

    package appium;
    
    import io.appium.java_client.android.*;
    
    import java.io.File;
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.concurrent.TimeUnit;
    
    import org.apache.commons.io.FileUtils;
    import org.openqa.selenium.OutputType;
    //import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.remote.CapabilityType;
    import org.openqa.selenium.remote.DesiredCapabilities;
    import org.openqa.selenium.JavascriptExecutor;
    import org.testng.Assert;
    //import org.testng.annotations.Test;
    import org.testng.annotations.BeforeTest;
    import org.testng.annotations.AfterTest;
    import org.testng.annotations.Parameters;
    import org.testng.annotations.Test;
    import java.util.*;
    
    
    public class appium {
        private AndroidDriver dr;
        private String reportPath = "C:\inetpub\wwwroot\Content\Images\";
        private int sleepBase = 1000;
        public String port;
        public String udid;
        public String pver;
        
        @BeforeTest  //must be j2se-1.5
        @Parameters({ "port", "udid" , "pver"})
        public void beforeSuite(String port, String udid, String pver) {
        //public void beforeSuite() {
            this.port = port;
            this.udid = udid;
            this.pver = pver;
            
            //this.port = "4723";
            //this.udid = "0123456789ABCDEF";
            //this.pver = "4.4";
        }
        @Test 
        public void TC_001() throws InterruptedException, MalformedURLException
        {
           try
           {
             LaunchApp();
             
             //Step1: go to view
             ClickByIndex("android.widget.ImageView", 6, "回单验证");
             
             //Step2: fill the form ; To do: put the input text into XML
             java.util.List<WebElement> arrEditText= dr.findElementsByClassName("android.widget.EditText");
             arrEditText.get(0).sendKeys("3243243255");
             arrEditText.get(1).sendKeys("1112312345123451234512345456");
             arrEditText.get(2).sendKeys("221234512345123456");
             
             InputkeyboardNum(arrEditText.get(3));
             
             arrEditText.get(4).sendKeys("441234123451234556");
             arrEditText.get(5).sendKeys("551234123451234556");
             PrintScreen(reportPath+udid+"_填写表单.jpg");
             
             //Step3: click search
             ClickByID("com.boc.bocsoft.phone:id/btn_receipt_ok", "点击查询");
             
             //Step4: check the string
             PrintScreen(reportPath+udid+"_回单验证查询.jpg");
             String text = dr.findElementById("com.boc.bocsoft.phone:id/tv_receipt_result_one_show_no").getText();
             Assert.assertEquals(text, "没有符合查询条件的交易回单");
           }
           catch(Exception e)
           {
               e.printStackTrace();           
           }
        }  
        
        @Test
        public void TC_002() throws InterruptedException, MalformedURLException
        {      
            Login();
            
            //Step1: go to view
                ClickByIndex("android.widget.ImageView", 3, "转账汇款");
            
            //Step2: fill the form      
            ClickByID("com.boc.bocsoft.phone:id/text_function_menu_child", "对公单笔汇款");
            ClickByID("com.boc.bocsoft.phone:id/payee_picker", "选择收款人");
            ClickByIndex("android.widget.TextView",2, "签约收款人");
            ClickByIndex("android.widget.TextView",8, "选择签约收款人");
            
            InputkeyboardNum(dr.findElementById("com.boc.bocsoft.phone:id/item_content"));
            
            //ClickByID("com.boc.bocsoft.phone:id/pick_indicator", "输入用途");
            //dr.findElementById("com.boc.bocsoft.phone:id/usage_content").sendKeys("输入中文用途");
            //dr.sendKeyEvent(4);        
            //ClickByID("com.boc.bocsoft.phone:id/confirm", "确定");
    
            for(int i =0; i< 3;i++)
            {
                swipeScreen(716.0, 988.0, 530.0, 504.0, 0.5, 4, dr);
                dr.swipe(716, 988, 530, 504, 1);
            }
            
            ClickByID("com.boc.bocsoft.phone:id/submit", "提交");
            String expect = dr.findElementById("com.boc.bocsoft.phone:id/result_info").getText();
            System.out.println(expect);
            
            ClickByID("com.boc.bocsoft.phone:id/main_iv_bank", "主页");
            ClickByIndex("android.widget.ImageView", 3, "转账汇款");
            ClickByIndex("android.widget.TextView", 9, "网银操作记录查询");
            ClickByID("com.boc.bocsoft.phone:id/operation_record_trade_query", "查询网银操作记录");
            List<WebElement> arrActual = dr.findElementsById("com.boc.bocsoft.phone:id/review_amount");
            String actual = arrActual.get(arrActual.size()-1).getText();
            System.out.println(actual);
            Assert.assertTrue(expect.contains(actual), "expect: " + expect + " ; actual: " + actual);
        }
        
    //basic operation
        private void ClickByID(String id, String log) throws InterruptedException, MalformedURLException
        {
            Thread.sleep(2000);
            System.out.println("Click " + log);
            dr.findElementById(id).click();
            Thread.sleep(sleepBase * 5);
            PrintScreen(reportPath+udid+ "_" + log + ".jpg");
        }
        private void ClickByIndex(String className, int index, String log) throws InterruptedException, MalformedURLException
        {
            Thread.sleep(2000);
            java.util.List<WebElement> arr= dr.findElementsByClassName(className);
            arr.get(index).click();
            System.out.println("Click " + log);
            Thread.sleep(sleepBase * 5);
            PrintScreen(reportPath+udid+ "_" + log + ".jpg");
        }
        private void SendKeysByID(String id, String keys) throws InterruptedException, MalformedURLException
        {
            System.out.println("Send " + keys);
            dr.findElementById(id).sendKeys(keys);
            Thread.sleep(1000);
        }
        
        private void Tappoint(int x, int y) throws InterruptedException, MalformedURLException
        {
            System.out.println("Tappoint: " + x + " , " + y);
            dr.tap(1, x, y, 100);
            Thread.sleep(1000);    
            
        }
        private void PrintScreen(String fileName) throws InterruptedException, MalformedURLException
        {
            System.out.println(fileName);
            
            File file= null;
            try
            {
               file= dr.getScreenshotAs(OutputType.FILE);
                FileUtils.copyFile(file, new File(fileName));
            } 
            catch (IOException e) 
            {
                e.printStackTrace();
            }             
        }
        
        //
        public static void swipeScreen(Double startX, Double startY, Double endX,
                Double endY, Double duration, int repeat, AndroidDriver driver) {
                JavascriptExecutor js = (JavascriptExecutor) driver;
                java.util.HashMap<String, Double> swipeObj = new java.util.HashMap<String, Double>();
                swipeObj.put("startX", startX);
                swipeObj.put("startY", startY);
                swipeObj.put("endX", endX);
                swipeObj.put("endY", endY);
                for (int i = 0; i < repeat; i++) {
                    try {
                        js.executeScript("mobile: flick", swipeObj);
                    } catch (Exception ex) {
                        System.out.println("滑动屏幕失败");
                    }
                }
            }
        public static void scroll(String direction, AndroidDriver driver) {
            JavascriptExecutor js = (JavascriptExecutor) driver;
            java.util.HashMap<String, String> scrollObject = new java.util.HashMap<String, String>();
            scrollObject.put("direction", direction);
            js.executeScript("mobile: scroll", scrollObject);
        }
    
    
    //app operation
        private void LaunchApp() throws InterruptedException, MalformedURLException
        {
            DesiredCapabilities capabilities = new DesiredCapabilities();
            capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
            capabilities.setCapability("deviceName", udid);
            capabilities.setCapability("udid", udid);
            capabilities.setCapability("platformVersion", pver);
            capabilities.setCapability("platformName", "Android");
            //aapt.exe dump badging apkPath
            capabilities.setCapability("appPackage", "com.boc.bocsoft.phone");
            capabilities.setCapability("appActivity", "com.boc.bocsoft.phone.activity.business.splash.MEBSplashActivity"); 
            capabilities.setCapability("unicodeKeyboard", "True");  //for input Chinese      
            capabilities.setCapability("resetKeyboard", "True");
            
            dr = new AndroidDriver(new URL("http://127.0.0.1:" + port + "/wd/hub"),capabilities);
            Thread.sleep(sleepBase * 10);  
            PrintScreen(reportPath+udid+"_Launch.jpg");
        }
        private void ExitAppium()
        {
            if(dr != null)
            {
                dr.closeApp();    
            }
        }
        private void Login() throws InterruptedException, MalformedURLException
        {
                try
                {
                    LaunchApp();
                    ClickByID("com.boc.bocsoft.phone:id/main_title_right_btn", "登录");
                    SendKeysByID("com.boc.bocsoft.phone:id/et_login_user_name", "jqhd001");
                    //SendKeysByID("com.boc.bocsoft.phone:id/sipbox_login_password", "0123456789abc");
                    //SendKeysByID("com.boc.bocsoft.phone:id/sipbox_login_verifys", "456789");
                    
                    dr.findElementById("com.boc.bocsoft.phone:id/sipbox_login_password").click();
                    Thread.sleep(3000);
                    for(int i=0;i<5;i++)
                    {
                        Tappoint(60,1360);
                        Tappoint(160,1360);
                    }
                    dr.sendKeyEvent(4);
                    
                    dr.findElementById("com.boc.bocsoft.phone:id/sipbox_login_verifys").click();
                    Thread.sleep(1000);
                    for(int i=0;i<6;i++)
                    {
                        Tappoint(178,1360);
                    }
                    dr.sendKeyEvent(4);
                    
                    PrintScreen(reportPath+udid+"_登录.jpg");
                    ClickByID("com.boc.bocsoft.phone:id/tv_login_submits", "点击登录");
                    
                    //wait for login: appium will automatic shutdown if no new cmd in 60s
                    System.out.println("Wait 100s for login");
                    WebElement loginSign = null;
                    for(int i=0;i<5;i++)
                    {
                        Thread.sleep(20000);
                        Tappoint(0,0);
                        
                        try{
                        loginSign = dr.findElementById("com.boc.bocsoft.phone:id/btn_dialog_error_enter");}
                        catch(Exception e){}
                        
                        if(loginSign != null)
                        {
                            System.out.println("Login done ! " + loginSign);
                            ClickByID("com.boc.bocsoft.phone:id/btn_dialog_error_enter", "修改密码提示");
                            return;
                        }
                    }
                }
                catch(Exception e){}
            //to do: we may have to retry 3 times because login always failed by bad network
        }
        private void InputkeyboardNum(WebElement ele) throws InterruptedException, MalformedURLException
        {
            System.out.println("software keyboard: input 123");
            ele.click();
            Thread.sleep(2000);
            //int x = dr.manage().window().getSize().width;
            //int y = dr.manage().window().getSize().height;     
            Tappoint(137, 1330);
            Tappoint(414, 1330);
            Tappoint(670, 1330);
            Tappoint(940, 1670);
            System.out.println("Input done");
        }
        
        @AfterTest
        public void afterTest()
        {
            ExitAppium();
        }
    }
    <?xml version="1.0" encoding="UTF-8"?>
    <suite name="Suite1">
      <parameter name = "port" value = "4723"/>
      <parameter name = "udid" value = "0123456789ABCDEF"/>
      <parameter name = "pver" value = "4.4"/> 
      <test name="Test">
        <classes>
          <class name="appium.appium"/>
        </classes>
      </test> <!-- Test -->
    </suite> <!-- Suite -->
  • 相关阅读:
    用Instant client批量安装Oracle客户端安装配置
    Oracle case when 用法(转)
    C# 读写ini文件 【转】
    oracle数据库删除数据Delete语句和Truncate语句的对比
    C#使用instantclient连接 Oracle 10g (转)
    SQL Server CONVERT() 函数
    c#格式化数字(转)
    InstantClient安装使用 (转)
    C# 四个字节十六进制数和单精度浮点数之间的相互转化
    oracle case when的使用方法
  • 原文地址:https://www.cnblogs.com/hbreset/p/4502658.html
Copyright © 2011-2022 走看看