zoukankan      html  css  js  c++  java
  • appium--获取坐标、长按、滑动操作(Java)

    一、TouchAction

    使用Appium需要引入java-client-xx.jar包,在java-client-5.0版本之前,Appium滑动使用的是swipe方法,从5.0之后,Appium已经取消swipe方法,交由TouchAction对象的方法来完成滑动操作。在java-client-5.0版本之前也有TouchAction对象,在java-client-5.0版本之后TouchAction对象的方法使用也有所变化。

    1.press短按

    短按操作是通过入参元素坐标的x,y值完成的

    (1)在5.0版本之前直接入参坐标x,y值

    press(int x,int y)

    (2)在5.0版本开始入参是调用PointOption对象的point方法

    press(PointOption.point(int x,int y))

    2.longPress长按

    长按操作同样是通过入参元素坐标的x,y值完成的,长按操作比较常见的如元素拖动、元素滑动等

    (1)在5.0版本之前直接入参坐标x,y值

    longPress(int x,int y)

    (2)在5.0版本开始入参是调用PointOption对象的point方法

    longPress(PointOption.point(int x,int y))

    3.waitAction暂停

    暂停等待

    (1)在5.0版本之前使用TouchAction的wait方法,入参是int类型,单位毫秒

    wait(2000)

    (2)在5.0版本开始,已经丢弃了wait方法,使用TouchAction的waitAction方法,入参WaitOptions对象,调用waitOptions方法的入参值是Duration.ofSeconds(1)单位是秒

    waitAction(WaitOptions.waitOptions(Duration.ofSeconds(1)))

    4.moveTo移动

    移动到某坐标位置,与press、longPress配合一起使用

    (1)在5.0版本之前moveTo入参为坐标x,y值

    moveTo(int x,int y)

    (2)在5.0版本开始入参是调用PointOption对象的point方法

    moveTo(PointOption.point(int x,int y))

    5.release释放

    完成press短按、longPress长按、waitAction等待、moveTo移动完成操作后需要使用release方法释放

    6.perform执行

    调用perform方法表示要执行press短按、longPress长按、waitAction等待、moveTo移动、release释放这些操作

    举例:

    PointOption startPoint = PointOption.point(1200,1200);
    PointOption endPointPoint = PointOption.point(1200,600);
    WaitOptions waitOption = WaitOptions.waitOptions(Duration.ofSeconds(1));
    new TouchAction<>(driver).longPress(startPoint).waitAction(waitOption).moveTo(endPointPoint).release().perform();

    这是一个往上滑动的操作,保持x坐标的不变,y坐标减少,表示从下往上滑动。操作过程是长按--等待1S--滑动--释放--执行

    二、获取坐标方法

    元素坐标位置的绝对值因设备大小、分辨率不同,值会不一样(不建议直接使用坐标操作元素),所以要使用相对位置来操作,Appium提供以下方法获取元素相对坐标

    1.获取屏幕大小

    int screenWidth = driver.manage().window().getSize().width;
    int screenHeight = driver.manage().window().getSize().height;

    2.获取元素开始坐标

    WebElement element = driver.findElement(By.id("ymxh.main:id/spinner_button"));
    Point p = element.getLocation();
    //获取元素开始的x,y坐标
    int startX = p.x;
    int startY = p.y;

    3.获取元素宽、高

    WebElement element = driver.findElement(By.id("ymxh.main:id/spinner_button"));
    //得到元素的宽、高
    Dimension d = element.getSize();
    int width = d.width;
    int height = d.height;

    4.得到元素坐标的结束坐标

    //得到坐标结束坐标
    int endX = startX+width;
    int endY = startY+height;

    5.得到元素中间坐标

    //得到元素中心坐标
    int centerX = (startX + endX)/2;
    int centerY = (startY + endY)/2;

    转载:https://blog.csdn.net/ouyanggengcheng/article/details/89184266

  • 相关阅读:
    atitit.团队建设要不要招技术储备人才的问题
    Atitit. 最佳实践 QA降低cpu占有率cpu占用太高怎么办
    Atitit.struts2体系结构大总结
    Atitit.hibernate体系结构大总结
    Atitit.软件GUI按钮与仪表盘db数据库区导入mysql sql错误的解决之道
    Atitit. Gui控件and面板程序快速启动区最佳实践Launchy ObjectDocko0g
    Atitit。团队建设管理最佳实践如何留住核心人才,防止人才流失 ??
    Atitit.ALT+TAB没反应车and 点击任务栏程序闪烁但是不能切换
    Atitit.Gui控件and面板数据库区mssql 2008 权限 配置 报表查看成员
    Atitit.故障排除系列NoClassDefFoundError NoClassDefFoundError
  • 原文地址:https://www.cnblogs.com/bugoobird/p/13910354.html
Copyright © 2011-2022 走看看