Selenium 3.0.1 Java客户端:longPress时长与释放问题咨询
关于Selenium 3.0.1 Java客户端TouchActions长按问题的解决方案
问题1:longPress默认时长与release()的作用
- Selenium 3.x中
TouchActions.longPress(WebElement)的默认长按时长为500毫秒,该方法内部已封装了「按压→释放」的完整逻辑,执行perform()后动作自动完成,不需要手动调用release()。
问题2:实现指定时长的长按(触发触摸事件)
你之前的代码报错NullPointerException,原因是TouchActions的动作链是一次性构建执行的,build().perform()会清空动作上下文,后续调用release()时因无有效Mouse实例(TouchActions不依赖Mouse)导致报错。以下是两种可行方案:
方案1:升级Selenium版本后使用Actions类的重载方法
如果能将Selenium升级到3.141.0及以上版本,可直接使用Actions类支持指定时长的longPress重载方法,代码示例:
Actions actions = new Actions(driver); // 长按3秒后释放 actions.longPress(element, Duration.ofSeconds(3)).release().perform();
方案2:通过JavascriptExecutor模拟原生触摸事件(适配3.0.1版本)
针对Selenium 3.0.1的限制,直接用JS触发原生触摸事件,精确控制长按时长:
JavascriptExecutor js = (JavascriptExecutor) driver; // 模拟touchstart后延迟3000ms触发touchend String touchScript = "var target = arguments[0];" + "var rect = target.getBoundingClientRect();" + "var touchPoint = {clientX: rect.x + rect.width/2, clientY: rect.y + rect.height/2};" + "// 触发触摸开始事件" + "var startEvent = new TouchEvent('touchstart', {" + " target: target," + " touches: [touchPoint]," + " bubbles: true" + "});" + "target.dispatchEvent(startEvent);" + "// 延迟指定时长后触发触摸结束事件" + "setTimeout(function() {" + " var endEvent = new TouchEvent('touchend', {" + " target: target," + " bubbles: true" + " });" + " target.dispatchEvent(endEvent);" + "}, arguments[1]);"; // 传入目标元素和长按时长(单位:毫秒) js.executeScript(touchScript, element, 3000);
内容的提问来源于stack exchange,提问作者Aud12
相关产品推荐
相关产品推荐

