自己写的一个Appium脚本

/**
 * 所有执行结果,均在Excel->output.xls中查看。。
 */

import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileCapabilityType;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.List;

import junit.framework.TestCase;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;

public class SmokeTest {
    private static AppiumDriver driver;

    public int i = 1;//找不到控件时,进行计数
    public int j = 0;//控制sheet表
    public int k = 7;//控制Excel记录结果的位置
    public int m = 1;//页面元素不对时,控制次数

    boolean flagment = false;
    String button_text, textName;

    WritableSheet sheetToEdit;
    WritableCell cell;
    static Workbook rwb;
    static WritableWorkbook workbookCopy;

    //配置参数连接Appium,启动App,读取aa.xls里面的数据,生成output.xls数据
    @BeforeClass
    public static void beforeClass() throws BiffException, IOException{
        System.out.println("--------------- 配置参数连接Appium,并启动App ---------------");

        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "");
        capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
        capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");

        capabilities.setCapability("unicodeKeyboard", true);
        capabilities.setCapability("resetKeyboard", true);

        capabilities.setCapability(MobileCapabilityType.APP_PACKAGE, "com.xxx");
        capabilities.setCapability(MobileCapabilityType.APP_ACTIVITY, "com.xxx.LoginActivity");

        driver = new AndroidDriver(new URL("http://LocalHost:4723/wd/hub"), capabilities);

        InputStream stream = new FileInputStream("Excel/ab.xls");
        rwb = Workbook.getWorkbook(stream);
        workbookCopy = Workbook.createWorkbook(new File("Excel/output.xls"), rwb);
    }


    @Before
    public void setup() throws Exception {
        j = 0;
        System.out.println("--------------- 执行测试用例开始 ---------------");
    }

    //每一次新开始执行用例,k++来纪录结果位置后移一位
    @After
    public void tearDown() throws Exception {
        System.out.println("--------------- 执行测试用例结束 ---------------");

    }

    //写入数据到output.xls,并终止
    @AfterClass
    public static void afterClass() throws WriteException, IOException{
        workbookCopy.write();
        workbookCopy.close();
        rwb.close();

        System.out.println("--------------- driver.quit ---------------");

        driver.quit();  
    }

    //执行点击操作,如果元素没找到或者没执行点击,则尝试5次,5次后还是没找到则下一步
    public boolean FunctionForClick(String s, String s1){
        while(i <= 5){
            try{
                driver.findElementById(s).click();

                System.out.println("---------- 已找到元素:<" + s1 + ">,且已执行点击操作~");
                flagment = true;
                break;
            }catch (Exception e){
                System.out.println("---------- 尝试第" + i + "次,无法执行元素:<" + s1 + ">的点击操作!!");

                i++;
            }

        if (i == 6){
            System.out.println("########## 已尝试5次,均未无法执行元素:<" + s1 + ">的点击操作!!");
            flagment = false;
            }
        }

        return flagment;
    }

    //执行输入文本操作,如果元素没找到或者没执行点击,则尝试5次,5次后还是没找到则下一步
    public boolean FunctionForSendText(String s, String sa, String s1){
        while(i <= 5){
            try{
                driver.findElementById(s).sendKeys(sa);

                System.out.println("---------- 已找到元素:<" + s1 + ">,且已执行发送文本操作~");
                flagment = true;
                break;
            }catch (Exception e){
                System.out.println("---------- 尝试第" + i + "次,无法执行元素:<" + s1 + ">的输入文本操作!!");
                i++;
            }

        if (i == 6){
            System.out.println("########## 已尝试5次,均未无法执行元素:<" + s1 + ">的输入文本操作!!");
            flagment = false;
            }
        }

        return flagment;
    }

    //执行清空文本操作,如果元素没找到或者没执行点击,则尝试5次,5次后还是没找到则下一步
    public boolean FunctionForClear(String s, String s1){
        while(i <= 5){
            try{
                driver.findElementById(s).clear();

                System.out.println("---------- 已找到元素:<" + s1 + ">,且已执行清空操作~");
                flagment = true;
                break;
            }catch (Exception e){
                System.out.println("---------- 尝试第" + i + "次,无法执行元素:<" + s1 + ">的清空操作!!");
                i++;
            }
        if (i == 6){
            System.out.println("########## 已尝试5次,均无法无法执行元素:<" + s1 + ">的清空操作!!");
            flagment = false;
            }
        }

        return flagment;
    }

    public boolean FunctionForClass(String s, String s1, int s2){
        while(i <= 5){
            try{
                List<WebElement> list = driver.findElementsByClassName(s);
                WebElement Button = list.get(s2);
                Button.click();

                System.out.println("---------- 已找到元素:<" + s1 + ">,且已执行查找class操作~");
                flagment = true;
                break;
            }catch (Exception e){
                System.out.println("---------- 尝试第" + i + "次,无法执行元素:<" + s1 + ">的查找class操作!!");
                i++;
            }
        if (i == 6){
            System.out.println("########## 已尝试5次,均无法无法执行元素:<" + s1 + ">的清空操作!!");
            flagment = false;
            }
        }

        return flagment;
    }

    @Test
    public void Smoke() throws InterruptedException, BiffException, IOException, RowsExceededException, WriteException {
         for(; j < workbookCopy.getNumberOfSheets();j++){
             sheetToEdit = workbookCopy.getSheet(j);
             for (int n = 2; n < sheetToEdit.getRows();){
                 i = 1;
                 m = 1;
                 boolean flag = false;

                 String forID = sheetToEdit.getCell(1, n).getContents().toString();
                 String forText = sheetToEdit.getCell(2,n).getContents().toString();
                 String forIndex = sheetToEdit.getCell(3,n).getContents().toString();
                 String forSendText = sheetToEdit.getCell(4, n).getContents().toString();
                 String forAction = sheetToEdit.getCell(5, n).getContents().toString();
                 String forCommits = sheetToEdit.getCell(6, n).getContents().toString();

                 if ((forAction.equals("点击")) && !forID.equals("") && forIndex.equals("")){
                     flag = FunctionForClick(forID, forCommits);
                     Thread.sleep(1000);

                 }

                 if (forAction.equals("") && !forSendText.equals("") && !forID.equals("") && forIndex.equals("")){
                     flag = FunctionForSendText(forID, forSendText, forCommits);
                     Thread.sleep(1000);

                 }

                 if (forAction.equals("清空") && !forID.equals("") && forIndex.equals("")){
                     flag = FunctionForClear(forID, forCommits);
                     Thread.sleep(1000);
                 }

                 if ((forAction.equals("点击")) && !forID.equals("") && !forIndex.equals("")){
                     flag = FunctionForClass(forID, forCommits, Integer.parseInt(forIndex));
                     Thread.sleep(1000);
                 }

                 if (flag == true){
                     Label l = new Label(k, n, "通过");
                     cell = (WritableCell) l;
                     sheetToEdit.addCell(cell);
                     n++;

                 }else if (flag == false){
                     Label l = new Label(k, n, "Not Found");
                     cell = (WritableCell) l;
                     sheetToEdit.addCell(cell);
                     n++;
                 }

                 //当前Sheet表中内容全部执行完后,就先找到相应的tab页,如果找到了就下一步;如果没找到,进行返回操作;如果5次内都无法执行返回,则账户可能已被迫下线,继续执行
                 if (n == sheetToEdit.getRows()){
                    while(m <= 5){
                        try{
                            driver.findElementById(workbookCopy.getSheet(j).getCell(1,1).getContents().toString());
                            Thread.sleep(1000);

                            m = 1;
                            System.out.println("---------- 已在当前Sheet表中第一个元素所在界面:<" + workbookCopy.getSheet(j).getCell(6,1).getContents().toString() + "> ^^^^^^");

                            break;
                        }catch(Exception e){
                            try{
                                driver.navigate().back();
                                Thread.sleep(1000);

                                System.out.println("---------- 未在当前Sheet表中第一个元素所在界面,执行返回");
                                m++;
                            }catch (Exception e2){
                                System.out.println("---------- 尝试第" + m + "次,无执行返回 @@@@@");

                                m++;
                            }
                            if (m == 6){
                                System.out.println("@@@@@@@@@@ 已尝试5次,无法返回到当前Sheet表中第一个元素所在界面,估计已被迫下线,或未进入指定界面,请重新执行 @@@@@@@@@@");

                                Label l = new Label(k, n, "无法返回到当前Sheet表中第一个元素所在界面,估计已被迫下线,或未进入指定页面,请重新执行");
                                cell = (WritableCell) l;
                                sheetToEdit.addCell(cell);

                                TestCase.assertTrue(false);
                            }       
                        }
                    }
                     n++;
                 }
             }
         }
    }

    @Test
    public void testRepeat() throws RowsExceededException, BiffException, WriteException, InterruptedException, IOException{
        for(int w = 1; w <= 2; w++){
            System.out.println("第" + (w + 1) + "次循环");
            try{
                driver.findElementById("com.xxx:id/btn_login");
                j = 0;
                k++;

                Smoke();
            }catch(Exception e){
                j = 1;
                k++;

                Smoke();
            }
        }
    }
}

自己写的比较搓,有不对之处,请高手指正

现在的问题是,程序跑着跑着就自己返回到待机桌面了

相关资料:http://blog.csdn.net/liuchangxin1982/article/category/5722775

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值