Open
Bug 1419394
Opened 7 years ago
Updated 2 years ago
WebDriver:ElementSendKeys synthesizes an extra "select" event even without any selection being made
Categories
(Remote Protocol :: Marionette, defect, P2)
Remote Protocol
Marionette
Tracking
(Not tracked)
NEW
People
(Reporter: whimboo, Unassigned)
References
(Depends on 1 open bug, Blocks 3 open bugs)
Details
Comment hidden (obsolete) |
Reporter | ||
Comment 1•7 years ago
|
||
Here the sequence of events for form elements when using `send_keys("F")`:
{
"type": "focus",
"keyCode": null,
"content": ""
},
{
"type": "keydown",
"keyCode": 70,
"content": ""
},
{
"type": "keypress",
"keyCode": 0,
"content": ""
},
{
"type": "input",
"keyCode": null,
"content": "F"
},
{
"type": "keyup",
"keyCode": 70,
"content": "F"
},
{
"type": "select",
"keyCode": null,
"content": "F"
}
Following keys do not cause a `select` event to be fired anymore. This event should only be fired if a selection is getting changed:
https://developer.mozilla.org/en-US/docs/Web/Events/select
This might need bug 1418995 being fixed first.
Comment 3•7 years ago
|
||
Can you think of any reason why a select event is fired? I also don’t understand the relationship to keyCode 0?
Blocks: webdriver
Flags: needinfo?(mjzffr)
OS: Unspecified → All
Priority: P3 → P2
Hardware: Unspecified → All
Summary: send_keys() synthesizes an extra keyCode of 0 for some events (keypress) → WebDriver:ElementSendKeys synthesizes an extra keyCode of 0 for some events (keypress)
Version: Version 3 → Trunk
Updated•7 years ago
|
Blocks: webdriver-actions
I don't know in what context this sendKeys call is being made, but maybe the element we're sending the keys to (an input, say) is being clicked or double-clicked in before or after sendKey that causes all the input text to be selected? I don't know of any reason why event.js would synthesize a select out of the blue.
As for keyCode 0, I don't this this is related to the select behaviour. By default it seems that Firefox produces a keypress with keyCode 0 (for printable characters only, I believe). Try it for yourself at https://dvcs.w3.org/hg/d4e/raw-file/tip/key-event-test.html
Flags: needinfo?(mjzffr)
Comment 5•7 years ago
|
||
Thanks for the link to that key record, it was very useful! So
Firefox produces keyCode 0 for all keypress events, and this is
expected.
keyCode 70 I believe is "F". Why would we expect the select event
to fire on typing an upper-case "F"?
Flags: needinfo?(hskupin)
Comment 6•6 years ago
|
||
According to https://developer.mozilla.org/en-US/docs/Web/Events/select
the select DOM event fires when something is being selected using
a pointer or shift + arrow keys. I imagine this could occur if we
call focus() on the element after interaction? That would explain
why we’re no longer sending select.
In any case, I don’t think select is expected for sendKeys("F").
Flags: needinfo?(hskupin)
Reporter | ||
Comment 7•6 years ago
|
||
keyCode is deprecated and shouldn't be used anymore. As such lets just ditch that part of the summary.
In regards of the "select" event this only happens when the window has the focus. If the focus is on a second window, no such event is getting fired.
Here a simplified testcase for Marionette:
> def test_typing(self):
> self.marionette.navigate(inline("""<input onselect="alert('select event')">"""))
> elem = self.marionette.find_element(By.TAG_NAME, "input")
> elem.send_keys("f")
Note that the same can be reproduced with geckodriver, but in such a case the element has to be focused first. This is all due to bug 1398111.
Also this problem clearly goes away when using actions, and as such lets wait for bug 1418995.
Depends on: 1398111
Summary: WebDriver:ElementSendKeys synthesizes an extra keyCode of 0 for some events (keypress) → WebDriver:ElementSendKeys synthesizes an extra "select" event even without any selection being made
Updated•2 years ago
|
Severity: normal → S3
Updated•2 years ago
|
Product: Testing → Remote Protocol
You need to log in
before you can comment on or make changes to this bug.