Appium Java:如何在AndroidDriver中替代TouchAction实现屏幕定点点击?
在Appium Java 8.5.1中实现指定坐标点击的解决方案
在Appium Java客户端8.x版本中,旧的TouchAction和PerformsTouchAction已被彻底移除,转而采用W3C标准的WebDriver动作API。以下是两种实现指定(x,y)坐标点击的可行方案:
方案一:使用Actions结合TapOptions
这是最简洁的实现方式,通过Actions类封装点击动作,配合TapOptions指定坐标:
// 将WebDriver实例转换为AppiumDriver(Actions依赖AppiumDriver的扩展能力) AppiumDriver driver = (AppiumDriver) theDriver; // 初始化Actions对象 Actions actions = new Actions(driver); // 构造点击选项,设置目标坐标(替换x和y为你的实际坐标值) TapOptions tapOptions = TapOptions.tapOptions().withPosition(PointOption.point(x, y)); // 执行点击动作 actions.tap(tapOptions).perform();
所需导入包
import io.appium.java_client.AppiumDriver; import io.appium.java_client.touch.TapOptions; import io.appium.java_client.touch.offset.PointOption; import org.openqa.selenium.interactions.Actions;
方案二:使用PointerInput和Sequence(底层W3C API)
如果需要更精细的控制动作时序,可以直接使用W3C标准的PointerInput和Sequence来构建触摸动作序列:
AppiumDriver driver = (AppiumDriver) theDriver; // 创建触摸输入设备实例 PointerInput finger = new PointerInput(PointerInput.Kind.TOUCH, "finger"); // 创建动作序列 Sequence tapSequence = new Sequence(finger, 1); // 添加动作步骤:移动到目标坐标 → 按下 → 短暂停留 → 抬起 tapSequence.addAction(finger.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), x, y)); tapSequence.addAction(finger.createPointerDown(PointerInput.MouseButton.LEFT.asArg())); tapSequence.addAction(finger.createPointerMove(Duration.ofMillis(100), PointerInput.Origin.viewport(), x, y)); tapSequence.addAction(finger.createPointerUp(PointerInput.MouseButton.LEFT.asArg())); // 执行动作序列 driver.perform(List.of(tapSequence));
所需导入包
import io.appium.java_client.AppiumDriver; import org.openqa.selenium.interactions.PointerInput; import org.openqa.selenium.interactions.Sequence; import java.time.Duration; import java.util.List;
关键说明
- 必须将
WebDriver强转为AppiumDriver,因为只有AppiumDriver才支持W3C动作API的扩展实现。 - 两种方案都兼容Appium Java客户端8.5.1和Selenium 4.10.0版本。
内容的提问来源于stack exchange,提问作者Rikudou
相关产品推荐
相关产品推荐

