如何使用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
相关产品推荐
相关产品推荐

