模拟按住 ctrl 按钮并在 X 秒后使用 Javascript 释放它
Posted
技术标签:
【中文标题】模拟按住 ctrl 按钮并在 X 秒后使用 Javascript 释放它【英文标题】:Simulate holding ctrl button and release it after X seconds with Javasctipt 【发布时间】:2021-08-13 02:43:51 【问题描述】:我正在尝试模拟用户单击 ctrl 按钮的情况,按住它单击 X 秒,然后释放它。 我怎样才能用 javascript 做到这一点?我尝试了下面的代码,但它不起作用。
var sourceElement = document.querySelector("some selector");
var evt = new KeyboardEvent('keydown', key: \"17\" );
sourceElement.dispatchEvent(evt);
// wait X seconds
var evt2 = new KeyboardEvent('keyup', key: \"17\" );
sourceElement.dispatchEvent(evt2);
【问题讨论】:
你怎么知道它不起作用?请提供minimal reproducible example。它对我有用:jsfiddle.net/aLbv1eqo/2 我没有写完整的上下文。我的床。我正在用 Selenium 编写自动化测试,并尝试使用 executeScript 函数模拟上述内容:JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript(脚本);当脚本是上面的代码时。当我运行测试时它不起作用。有什么想法吗? 获得帮助的最佳方式是创建一个minimal reproducible example,其中包含对预期行为和实际行为的描述。目前这个问题对我来说还不清楚。你的代码 sn-p 对我有用。您不应该在评论中发布代码。不可读。 【参考方案1】:您可以使用actions
,而不是通过JavascriptExecutor运行它,例如如下。
const actions = driver.actions();
actions.keyDown(CTRL)
.pause(milliseconds)
.keyUp(CTRL)
.perform();
【讨论】:
是的,我对此很熟悉。就我而言,我使用 JS 模拟拖放,因为它不适用于 Selenium API。而且我需要在拖放时按住 ctrl 按钮并在拖放后释放它。这就是为什么我需要用 JS 来做的原因。 您在代码中的哪个位置模拟拖放?你的问题看起来只是 CTRL 按钮。【参考方案2】:您可以使用此代码:
Actions action = new Actions(driver);
action.clickAndHold(sourceElement).build().perform();
【讨论】:
是的,我对此很熟悉。就我而言,我使用 JS 模拟拖放,因为它不适用于 Selenium API。而且我需要在拖放时按住 ctrl 按钮并在拖放后释放它。这就是为什么我需要用 JS 来做的原因以上是关于模拟按住 ctrl 按钮并在 X 秒后使用 Javascript 释放它的主要内容,如果未能解决你的问题,请参考以下文章