zoukankan      html  css  js  c++  java
  • appium自动化框架项目实战1——app初次使用引导页

    本套框架实现了appium全自动执行,多台设备同时执行,自动启服务,自动生成testng文件,监听,重连.......只需写测试脚本

    编写脚本顺序:page、action、test

    本次实战以“联通手机营业厅app”为例进行脚本编写,一下的page类和action类可以合并,但分开更为明确,根据自己喜好来写;断言可写在action中也可以写在test中;

    用例:app初次使用出现的引导页,滑动3次,可点击进入app应用

     

    1、创建配置文件

    1)yindaopage1001.properties

    ImageView=classname>android.widget.ImageView
    ok_button=id>com.sinovatech.unicom.ui:id/custom_dialog_ok_button
    tiaoguo_textview=id>com.sinovatech.unicom.ui:id/welcome_tiaoguo_textview
    login=id>com.sinovatech.unicom.ui:id/home_login_button
    2)android_caps.properties

    app=C:/Users/jff/Desktop/mobileyy.apk
    deviceName=devicename
    automationName=Appium
    newCommandTimeout=600
    #appPackage=com.zhihu.android
    #appActivity=com.zhihu.android.app.ui.activity.MainActivity
    #appWaitActivity=com.hotyq.app.android.activity.MainActivity
    appPackage=com.sinovatech.unicom.ui
    appActivity=com.sinovatech.unicom.ui.WelcomeClient
    noSign=true
    unicodeKeyboard=true
    resetKeyboard=true
    deviceReadyTimeout=30
    #noReset=true
    #autoGrantPermissions=true
    3)global.properties
     

    androidserver=http://127.0.0.1
    iosserver=http://127.0.0.1
    senduser=vop_jiangfeifei@163.com
    password=邮箱密码
    tomail=1096101476@qq.com
    implicitlyWait=10
    input=
    #0:android and ios;1:android;2:ios
    deviceType=1
    #appType 0:原生;1:混合;2:H5
    appType=1
    #0:均分测试用例每个设备;1:每个设备都执行所有用例
    testType=1
    #测试用例,“,”分割
    testcases=com.crazy.appium.testcases.Test10010
    2、创建page包,创建page类

    package com.crazy.appium.page;
    import com.crazy.appium.driver.CrazyMobileDriver;
    import com.crazy.appium.utils.GetLocatorUtils;
    import io.appium.java_client.MobileElement;
    public class YinDaoPage10010{
    public MobileElement start;
    public MobileElement tiaoguo;
    public CrazyMobileDriver driver;
    public MobileElement ok_button;
    public GetLocatorUtils locatorUtils;
    public YinDaoPage10010(CrazyMobileDriver driver){
    this.driver=driver;
    this.locatorUtils=new GetLocatorUtils("configs/yindaopage10010.properties");
    }
    public MobileElement getStart() {
    return driver.findElement(locatorUtils.getByLocalor("ImageView"));
    }
    public MobileElement getOk_button() {
    return driver.findElement(locatorUtils.getByLocalor("ok_button"));
    }
    public MobileElement getTiaoguo() {
    return driver.findElement(locatorUtils.getByLocalor("tiaoguo_textview"));
    }
    }
    3、创建action包,Action类

    package com.crazy.appium.action;
    import static org.testng.Assert.assertEquals;
    import org.testng.Assert;
    import com.crazy.appium.driver.CrazyMobileDriver;
    import com.crazy.appium.page.YinDaoPage10010;
    public class YinDaoAction10010 extends YinDaoPage10010{
    public YinDaoAction10010(CrazyMobileDriver driver) {
    super(driver);
    // TODO Auto-generated constructor stub
    }
    public void enterHomePage(){
    //滑动
    for(int i=0;i<3;i++){
    driver.swipe("left", 500);
    driver.sleep(1000);
    }
    //最后一页点击进入应用
    getStart().click();
    }
    public void kaiqi(){
    getOk_button().click();
    driver.sleep(500);
    //断言可以写在action中,方便维护,test中直接调用即可
    Assert.assertEquals(driver.isElementExist(locatorUtils.getByLocalor("login")), true);
    }
    //直接跳过
    public void skip(){
    getTiaoguo().click();
    }
    }
    4、创建test包,test类

    1)TestBase

    package com.crazy.appium.testcases;
    import org.testng.annotations.AfterClass;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.Parameters;
    import com.crazy.appium.driver.CrazyMobileDriver;

    /**定义的driver对象,为driver、udid赋值
    * 所写的Test都需要继承这个类,若需要一次执行多个测试类
    * 1.配置如安卓,配好后;
    * 2.配置global,testcase哪里用逗号分隔即可
    * 3.找到main方法,执行
    */
    public class TestBase {
    CrazyMobileDriver driver;
    //AppiumDriverLocalService service;
    String udid;

    public CrazyMobileDriver getDriver(){
    return driver;
    }
    public String getUdid(){
    return udid;
    }
    //类初始化
    @Parameters({"udid","port"})
    @BeforeClass
    public void beforeClass(String udid,String port) throws Exception{
    this.udid=udid;
    driver=new CrazyMobileDriver("android",udid,port);
    driver.implicitlyWaitDefault();
    driver.sleep(10000);
    }
    @AfterClass
    public void afterClass(){
    driver.quit();
    //service.stop();
    }
    }
    2)测试用例,可以把断言写在action中,也可以写在test中

    package com.crazy.appium.testcases;
    import org.testng.Assert;
    import org.testng.annotations.Test;
    import com.crazy.appium.action.YinDaoAction10010;
    public class Test10010 extends TestBase{
    @Test
    public void tes001_yindao(){
    YinDaoAction10010 yd=new YinDaoAction10010(driver);
    yd.enterHomePage();
    driver.sleep(1000);
    //断言也可以写在test中
    Assert.assertEquals(driver.getPageSource().contains("温馨提示"), true);
    }
    @Test(dependsOnMethods="tes001_yindao")
    public void tes001_kaiqi(){
    YinDaoAction10010 yd=new YinDaoAction10010(driver);
    yd.kaiqi();
    }

  • 相关阅读:
    [Vue音乐项目] 第六节 歌单列表
    [Vue音乐项目] 第五节 服务器代理跨域
    [Vue音乐项目] 第四节 轮播图
    [Vue音乐项目] 第三节 JSONP跨越
    [Vue音乐项目] 第二节 前提工作
    [Vue音乐项目] 第一节 环境搭建
    HTML网页页脚版权标志
    移动端页面隐藏滚动条
    FDD项目中的总结
    bootstrap模态窗字体模糊
  • 原文地址:https://www.cnblogs.com/Snail-offort/p/10818759.html
Copyright © 2011-2022 走看看