【问题标题】:Simulate holding ctrl button and release it after X seconds with Javasctipt模拟按住 ctrl 按钮并在 X 秒后使用 Javascript 释放它
【发布时间】:2023-03-10 05:19:01
【问题描述】:

我正在尝试模拟用户单击 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 对我有用。您不应该在评论中发布代码。不可读。

标签: javascript selenium events keyboard


【解决方案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 来做的原因
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-12
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多