You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用W3C Actions在Appium中实现双指点击操作?

Selenium双指点击实现(基于W3C Actions)

目前网上关于单指点击、滑动、双击的Selenium教程随处可见,但双指点击的相关实现却很难找到。确实双指点击并非桌面浏览器的常规操作,但基于W3C标准的Actions API完全可以实现该需求——而且现在TouchActions已被弃用,官方也明确推荐使用W3C Actions来处理各类触摸操作。

先回顾你提供的单指点击示例代码:

PointerInput finger01 = new PointerInput(PointerInput.Kind.TOUCH, "finger01");
PointerInput.PointerEventProperties pep = new PointerInput.PointerEventProperties();
java.time.Duration duration0 = java.time.Duration.ofMillis(0);
java.time.Duration duration100 = java.time.Duration.ofMillis(100);
PointerInput.Origin vp = PointerInput.Origin.viewport();

Sequence tapSeq = new Sequence(finger01, 1);
tapSeq.addAction(finger01.createPointerMove(duration0, vp, 300, 400));
tapSeq.addAction(finger01.createPointerDown(0, pep));
tapSeq.addAction(finger01.createPointerMove(duration100, vp, 300, 400));
tapSeq.addAction(finger01.createPointerUp(0, pep));

针对双指点击,你需要为两根手指分别创建PointerInput实例和对应的动作序列,最终将两个序列合并执行即可,实现代码如下:

// 初始化两根手指的触摸指针
PointerInput finger01 = new PointerInput(PointerInput.Kind.TOUCH, "finger01");
PointerInput finger02 = new PointerInput(PointerInput.Kind.TOUCH, "finger02");

PointerInput.PointerEventProperties pep = new PointerInput.PointerEventProperties();
java.time.Duration duration0 = java.time.Duration.ofMillis(0);
java.time.Duration duration100 = java.time.Duration.ofMillis(100);
PointerInput.Origin vp = PointerInput.Origin.viewport();

// 第一根手指的点击动作序列:移动到目标点 → 按下 → 短暂停留 → 抬起
Sequence finger01Seq = new Sequence(finger01, 1);
finger01Seq.addAction(finger01.createPointerMove(duration0, vp, 250, 400)); // 设置第一根手指的点击位置
finger01Seq.addAction(finger01.createPointerDown(0, pep));
finger01Seq.addAction(finger01.createPointerMove(duration100, vp, 250, 400));
finger01Seq.addAction(finger01.createPointerUp(0, pep));

// 第二根手指的点击动作序列:移动到另一目标点 → 按下 → 短暂停留 → 抬起
Sequence finger02Seq = new Sequence(finger02, 1);
finger02Seq.addAction(finger02.createPointerMove(duration0, vp, 350, 400)); // 设置第二根手指的点击位置,与第一根保持合理间距
finger02Seq.addAction(finger02.createPointerDown(0, pep));
finger02Seq.addAction(finger02.createPointerMove(duration100, vp, 350, 400));
finger02Seq.addAction(finger02.createPointerUp(0, pep));

// 合并两个序列并执行双指点击
new Actions(driver)
        .addAction(finger01Seq)
        .addAction(finger02Seq)
        .perform();

关键说明:

  • 双指点击的核心是让两根手指的点击动作同步执行,因此需要为每根手指单独定义动作序列。
  • 两根手指的目标位置要设置为屏幕上不同的坐标,模拟真实的双指操作场景。
  • 通过Actions类将两个序列合并后执行,就能触发双指点击的效果。

内容的提问来源于stack exchange,提问作者jwallis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 04:57:25