【问题标题】:Simulating keyboard event through javascript通过javascript模拟键盘事件
【发布时间】:2015-09-23 04:40:22
【问题描述】:

我正在尝试通过 javascript 在网页中模拟键盘事件,因为 Safari 浏览器不支持操作。

首先,我创建了一个简单的表单(如下所示)并尝试在文本框之间切换,但它不起作用。

使用的 Java 脚本:(ubuntu 和 chrome 浏览器)。我在 chrome 浏览器控制台中触发了脚本。

var pressTabKey = document.createEvent("KeyboardEvent");
pressTabKey.initKeyboardEvent("keypress", true, true, null, false, false, false, false, 9, 0);
document.getElementById('1234').focus();
document.getElementById('1234').dispatchEvent(pressTabKey);

HTML 表单:

   <html>      
   <head>         
   </head>   
   <body>
        <p>Test Page </p>      
        <form>
        <input  id="1234" type="text" value="Enter Here"> 
        <br>
        <br>
        <input  id="1235" type="text" value="Enter Here">           
        </form>  
  </body>   
  </html>

【问题讨论】:

  • 不是stackoverflow.com/questions/961532/…的复制品吗?
  • 我确实通过了那个线程并使用了那些函数和参数。但是即使我可以模拟鼠标事件,我也无法模拟像 Tab 键这样的键盘事件。无论如何,我会再次检查这两个博客。
  • 当我尝试上面显示的代码时 - jsfiddle.net/pymgnbk9/2 - 它按预期切换到第一个输入字段,所以不确定哪里出了问题。在调用 JS 之前,你确定 HTML 已经加载了吗?
  • 对不起,你为什么不能用focus() 做跳跃? jsfiddle.net/pymgnbk9/3

标签: javascript selenium-webdriver


【解决方案1】:

希望这会有所帮助:

https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events

示例: 我创建一个事件并使用 dispatchEvent() 来触发它:

var pressTabKey = new Event('keydown');
document.getElementById('1234').addEventListener('keydown', function() { alert("hi!"); });
document.getElementById('1234').dispatchEvent(pressTabKey);

函数 createEvent() 已弃用: https://developer.mozilla.org/en-US/docs/Web/API/Document/createEvent


编辑: 您可以简单地从 keydown 或 keypress 事件中读取键代码,如下所示:

http://jsfiddle.net/adrielD/me9q1qu6/

HTML

<p>Test Page </p>      
<form>
    <input id="1234" type="text" value="Enter Here"><br>
    <input id="1235" type="text" value="Enter Here">          
</form>

JS:

var tab1 = document.getElementById("1234");
var tab2 = document.getElementById("1235");

tab1.addEventListener("keydown", function(event) {
     if(event.keyCode == 9) {
        event.preventDefault();
        tab2.focus();
     }
});

tab2.addEventListener("keydown", function(event) {
    if(event.keyCode == 9) {
        event.preventDefault();
        tab1.focus();
    }
});

【讨论】:

    【解决方案2】:

    如果你碰巧加载了 jQuery,你可以这样做:

    $(el).trigger({type: 'keypress', which: 13, keyCode: 13});
    

    你的例子是:

    $("#1234").trigger({type: 'keypress', which: 9, keyCode: 9});
    

    有关完整文档,请参阅 http://api.jquery.com/trigger/

    【讨论】:

      【解决方案3】:

      我遇到了完全相同的问题,尝试了很多方法,最终使用AHK 触发键盘事件(和一些鼠标事件)。我只是找不到任何仅硒的解决方案。不过,AHK 仅适用于 Windows。如果您在其他平台上使用 selenium,例如 Mac OS,请查看this thread

      使用 AHK,按键操作相当容易,设置焦点后,只需启动 AHK 脚本,在其中“发送密钥”:

      send, abc
      

      AHK 具有成熟的脚本语言,因此您可以将其包装在循环/条件中。如有必要,您还可以在特定位置模拟鼠标点击。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-19
        • 1970-01-01
        • 1970-01-01
        • 2013-05-25
        • 1970-01-01
        • 1970-01-01
        • 2012-10-12
        • 1970-01-01
        相关资源
        最近更新 更多