I am developing some programmatic automation within a web page and am attempting to enter a keystroke into an input web element in Chrome 56 (specifically 56.0.2924.87) and cannot seem to get it working.
I have done my homework and attempted MANY online examples including the ones found here: Javascript - simulate key events on Chrome 53, but with no luck.
This is my most recent (currently non-working) attempt based on the solution provided in the question above:
<!DOCTYPE html>
<head>
<meta charset="utf-8" />
<title>Keyboard Events</title>
</head>
<body>
<input id="id_input" onkeydown="console.log(event);">
<button onclick="
var e = new Event('keydown');
e.keyCode = 65;
document.getElementById('id_input').dispatchEvent(e);
">click me</button>
</body>
</html>
I am developing some programmatic automation within a web page and am attempting to enter a keystroke into an input web element in Chrome 56 (specifically 56.0.2924.87) and cannot seem to get it working.
I have done my homework and attempted MANY online examples including the ones found here: Javascript - simulate key events on Chrome 53, but with no luck.
This is my most recent (currently non-working) attempt based on the solution provided in the question above:
<!DOCTYPE html>
<head>
<meta charset="utf-8" />
<title>Keyboard Events</title>
</head>
<body>
<input id="id_input" onkeydown="console.log(event);">
<button onclick="
var e = new Event('keydown');
e.keyCode = 65;
document.getElementById('id_input').dispatchEvent(e);
">click me</button>
</body>
</html>
You can observe the event being generated, but no character appears in the input web element.
I would greatly appreciate a working JavaScript only example, working in Chrome 56, of pressing a button on a page and a character appearing in the input web element WITHOUT setting the "value" property of the input web element. The working solution must be causing characters to appear only by using events (presumably keypress/keydown, etc.)
UPDATE: My issue is different than this issue: How to trigger event in JavaScript? because I'm already using the dispatchEvent method listed in the solution. The answer to my question will likely include an additional step not already outlined in the multiple attempts from the first link I included.
Share Improve this question edited May 23, 2017 at 12:25 CommunityBot 11 silver badge asked Mar 7, 2017 at 0:38 LorenLoren 1902 silver badges14 bronze badges 16- If you have access to the form element - is there any reason why you wouldn't just set it's value? – Shadow Commented Mar 7, 2017 at 0:41
- 1 The solution will be used within the context of a Chrome Extension that automates a previously unknown System Under Test which uses event handlers EXPECTING the character es through keydown/keypress events. I have already attempted setting the value directly and passing dummy events, but the SUT does not handle it appropriately. As an example, I need to pass an "Enter key" in special cases and have the input event handlers (which we do not control) respond accordingly as if someone had pressed the <ENTER> key. – Loren Commented Mar 7, 2017 at 0:44
-
It may not be possible to make the browser respond to simulated keyboard events: native software handlers for key events received from the OS do not have event listeners set up for the events they create and dispatch on
document.activeElement
. All they do is check that the events they dispatched weren't cancelled before proceding to add text content to an input element (say). – traktor Commented Mar 7, 2017 at 1:34 - Possible duplicate of How to trigger event in JavaScript? – Psi Commented Mar 7, 2017 at 2:09
- @Psi I appreciate you backing me up in due diligence for a "duplicate check", but I'm already using the dispatchEvent method as listed in the solution you reference. The answer to this question will likely include an additional step not already outlined in the multiple attempts from the link I placed in my question. – Loren Commented Mar 7, 2017 at 7:08
1 Answer
Reset to default 8 +50In terms of implementing this functionality from within in a Chrome extension, it looks like it is possible with workarounds. These links might be able to help.
Keydown Which Not Working Chrome Extension
How to to initialize keyboard event with given char/keycode in a Chrome extension?
On a webpage however, this is not possible. At least not with Chrome 56. There is an isTrusted
read only attribute of the Event object.
The event is "trusted" if invoked by a real user on a keyboard, and is "not trusted" if invoked by a script.
As indicated here, untrusted events do not invoke the default action. This has been present since Chrome 53.