appium笔记五:操作层之常用操作类封装

这个类主要是根据自己的需要或项目需要封装常用的操作方法,没有特别的要求和难度。前面还有一个appium 的api层封装的是appium框架提供的各种方法,目的是增加稳定性处理一些异常等,这个后面再贴代码

后续所有页面的操作类方法直接new这个类,每个页面也只会新建一个Action类,即初始化一片页面元素,单例模式。具体代码如下:

package com.datas.api;

import com.appium.api.ElementMethodObject;
import com.appium.api.Log;
import com.appium.api.SwipeMethodObject;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

import java.text.MessageFormat;
import java.util.List;

import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidKeyCode;

import static com.appium.api.ThreadSleepMethod.threadSleep;


/**
 * Created by kingwit on 2017/9/11 0011.
 * 提供动作类操作,点击设置值等,并完成元素初始化
 * 继承 InitTestPage类
 */

public class ActionTest extends InitTestPage{
    public static AndroidDriver driver;
    private String pageName;
    private ElementMethodObject emb=new ElementMethodObject();
    private SwipeMethodObject sm =new SwipeMethodObject(driver);

    public ActionTest(){}

    public ActionTest(AndroidDriver driver){
        this.driver=driver;
    }

    public ActionTest(AndroidDriver driver,String pageName){
        super(driver,pageName);
        this.driver=driver;
        this.pageName=pageName;
    }

    /**
     * 给某个element 输入字符,这个专用于回复评论类
     * 参数:buttonName,value
     */
    public void setCommentValue(String buttonName,String value){
        WebElement element =emb.waitForElementPresent(driver,getBy(buttonName),10);
        element.sendKeys(value);
        threadSleep(2000);
    }

    /**
     * 给某个element 输入字符,这个不适合用于回复评论类
     * 参数:buttonName,value
     */
    public void setValue(String buttonName,String value){
        WebElement element =emb.waitForElementPresent(driver,getBy(buttonName),10);
        int size = element.getText().length();
        driver.pressKeyCode(123);
        for(int i = 0; i < size; i++){
            Log.info("搜索框有内容,删除原来数据...");
            driver.pressKeyCode(AndroidKeyCode.BACKSPACE);
        }
//       if(isElementExist("earse_search")){
//            Log.info("编辑有内容,删除原来数据...");
//            click("earse_search");
//        }
        element.sendKeys(value);
        threadSleep(2000);
    }

    /**
     * 获取id的text内容
     * 参数:buttonName
     */
    public String getValue(String buttonName){
        WebElement element =emb.waitForElementPresent(driver,getBy(buttonName),10);
        return element.getText();
    }

    /**
     * 获取id的text内容
     * 参数:by对象
     */
    public String getValue(By by){
        return emb.waitForElementPresent(driver,by,10).getText();
    }


    /**
     * 点击element
     * 参数:buttonName
     */
    public void click(String buttonName){
        emb.waitForElementPresent(driver,getBy(buttonName),10).click();
    }


    /**
     * 直接点击元素
     * 参数:element
     */
    public void click(WebElement element){
        element.click();
    }


    //自定义点击方法用于,专门用于灵活点击不固定的xpath
    public void click(By byPathName){
        emb.waitForElementPresent(driver,byPathName,10).click();
//        TouchAction tap=new TouchAction(driver);
//        tap.tap(emb.waitForElementPresent(driver,byPathName)).release().perform();
    }

    /**
     * 点击屏幕(基于element)
     * 参数:buttonName
     */
    public void tap(String buttonName){
        TouchAction tap=new TouchAction(driver);
        tap.tap(emb.waitForElementPresent(driver,getBy(buttonName),10)).release().perform();
    }

    /**
     * 点击屏幕(基于坐标)
     * 参数:buttonName
     */
    public void tapXY(int x, int y){
        TouchAction ta=new TouchAction(driver);
        ta.tap(x, y).perform();
    }

    /**
     * 获取屏幕的尺寸
     * 参数:driver对象
     * return  屏幕宽和高
     **/
    public int[] getAppScreenWH(){
        int[] appWidthAndHeight;
        appWidthAndHeight = sm.getAppScreen(driver);
        return appWidthAndHeight;
    }


    /**
     * 获取元素列表
     * 参数:buttonName
     */
    public List<WebElement> getElementList(String buttonName){
        return  (List<WebElement>)driver.findElements(getBy(buttonName));
    }

    /**
     * 获取元素对象
     * 参数:buttonName
     */
    public WebElement  getElement(String buttonName){
        return  emb.waitForElementPresent(driver,getBy(buttonName),1);
    }

    /**
     * 滑动屏幕,这里滑动速度固定未2.5s,滑动次数 1次
     * 参数:direction 滑动方向
     */
    public void swipeScreen(String direction){
        switch (direction) {
            case "up":
                Log.info("开始向上滑动...");
                sm.slideUP(driver,2500,1);
                break;
            case "down":
                Log.info("开始向下滑动...");
                sm.slideDown(driver,2500,1);
                break;
            case "right":
                Log.info("开始向右滑动...");
                sm.slideRight(driver,2500,1);
                break;
            case "left":
                Log.info("开始向左滑动...");
                sm.slideLeft(driver,2500,1);
                break;
            default:break;

        }
    }

    /**
     * 滑动某个元素,左右滑动
     * 参数:buttonName
     */
    public void swipElement(String buttonName,String direction){
        WebElement element =emb.waitForElementPresent(driver,getBy(buttonName),10);
        sm.slidingElement(element,direction,1500,1);
    }


    /**
     * 判断某个元素是否存在
     * 参数:buttonName
     */
    public boolean isElementExist(String buttonName){
        boolean exist = false;
        if(emb.isElementPresent(driver,getBy(buttonName))){
            exist = true;
            Log.info("需要找的元素存在,返回True...");
        }
        return exist;  //存在则返回true
    }

    /**
     * 在元素上长按
     * 参数:buttonName
     */
    public void loogPress(String buttonName){
        try{
            WebElement element = emb.waitForElementPresent(driver,getBy(buttonName),10);
            TouchAction ta = new TouchAction(driver);
            ta.longPress(element).release().perform();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 获取当前activity 声明为静态函数,其他类可调用
     * 参数:无
     */
    public  String getCurrentActivity(){
        return  driver.currentActivity();
    }

    /**
     * 物理安静返回上一页
     * 参数:无
     */
    public void goBack(){
        driver.pressKeyCode(AndroidKeyCode.BACK);
    }


    //用于动态参数定位xpath路径,使用占位符获取参数
    //返回实际操作xpath路径字符串
    public String stringFormate(String  xpath,int index){

        return  MessageFormat.format(xpath,index);
    }

    //用于动态参数定位xpath路径,使用占位符获取参数
    //返回实际操作xpath路径字符串
    public String stringFormate(String xpath,String str){

        return  MessageFormat.format(xpath,str);
    }

    //用于动态参数定位xpath路径,使用占位符获取参数
    //返回实际操作xpath路径字符串
    public String stringFormate(String xpath,int index,String string){

        return  MessageFormat.format(xpath,index,string);
    }

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值