Appium基础学习之 | Appium长按、滑动、获取坐标

一、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;

### 使用 Appium 实现按下拉刷新 在 Android 应用中,通过 Appium 可以实现按操作以及下拉刷新功能。以下是具体的代码示例: #### Python 示例代码 ```python from appium import webdriver import time desired_caps = { "platformName": "Android", "deviceName": "emulator-5554", # 替换为实际设备名称 "appPackage": "com.example.app", # 替换为目标应用包名 "appActivity": ".MainActivity" # 替换为目标活动名称 } driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) time.sleep(5) # 等待页面加载 # 获取屏幕尺寸 size = driver.get_window_size() start_x = size['width'] / 2 end_y = int(size['height'] * 0.8) start_y = int(size['height'] * 0.2) # 执行按并拖动的操作 duration = 1000 # 按时(毫秒) driver.swipe(start_x, end_y, start_x, start_y, duration) time.sleep(3) # 等待刷新完成 driver.quit() ``` 此代码实现了以下逻辑: 1. 连接至 Appium Server 并启动目标应用程序[^2]。 2. 计算屏幕上滑动的起点和终点坐标[^1]。 3. 调用 `swipe` 方法执行从底部到顶部的滑动动作[^4]。 #### Java 示例代码 如果使用的是 Java,则可以参考以下代码片段: ```java import io.appium.java_client.AppiumDriver; import org.openqa.selenium.Dimension; public class LongPressRefreshExample { public static void main(String[] args) throws InterruptedException { AppiumDriver<?> driver; // 初始化驱动程序 Dimension dimensions = driver.manage().window().getSize(); int centerX = dimensions.getWidth() / 2; int startY = (int) (dimensions.getHeight() * 0.8); int endY = (int) (dimensions.getHeight() * 0.2); // 设置按时间(单位:毫秒) Integer duration = 1000; // 执行滑动操作 ((io.appium.java_client.TouchAction) new TouchAction<>(driver)) .press(PointOption.point(centerX, startY)) .waitAction(WaitOptions.waitOptions(Duration.ofMillis(duration))) .moveTo(PointOption.point(centerX, endY)) .release() .perform(); Thread.sleep(3000); // 等待刷新完成 } } ``` 这段代码同样完成了从屏幕底部向上的滑动操作,并触发了下拉刷新事件[^3]。 --- ### 注意事项 - **按时间调整**:可以根据需求修改变量 `duration` 的值来控制按的时间度。 - **适配不同分辨率**:计算起始点和结束点时需考虑不同的屏幕分辨率,因此建议基于屏幕比例动态获取坐标位置。 - **依赖库版本匹配**:确保所使用的 Selenium 和 Appium 客户端版本兼容[^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值