Skip to content

Element SendKeys does not send keydown/keyup events for shift key when sending "shifted" keystrokes #646

@jimevans

Description

@jimevans

In order to help us efficiently investigate your issue, please provide the following information:

Firefox Version

55.0a1 (2017-04-12) (32-bit)
geckodriver as of commit 15345b6

Platform

Windows

Steps to reproduce

Execute the following code using the Selenium .NET bindings (exact W3C WebDriver protocol commands are included as comments):

FirefoxOptions options = new FirefoxOptions();
options.LogLevel = FirefoxDriverLogLevel.Trace;
options.BrowserExecutableLocation = @"C:\Program Files (x86)\Nightly\firefox.exe";

// POST /session
// command body:
// {
//     "capabilities": {
//         "alwaysMatch" : {
//             "browserName": "firefox",
//             "acceptInsecureCerts": true,
//             "moz:firefoxOptions": {
//                 "binary": "C:\Program Files (x86)\Nightly\firefox.exe",
//                 "log": {
//                     "level": "trace"
//                 }
//             }
//         }
//    }
// }
IWebDriver driver = new FirefoxDriver(options);

// POST /session/{sessionId}/url
// Request Body: { "url": "<url to the hosted HTML file, provided below>" }
driver.Url = "<url to HTML file, provided below>";

// POST /session/{sessionId}/element
// Request Body: { "using": "css selector", "value": "#result" }
IWebElement result = driver.FindElement(By.CssSelector("#result"));

// POST /session/{sessionId}/element
// Request Body: { "using": "css selector", "value": "#result" }
IWebElement element = driver.FindElement(By.CssSelector("#keyReporter"));

// POST /session/{sessionId}/element/{elementId}/value
// Request Body: { "text": "~" }
element.SendKeys("~");

// GET /session/{sessionId}/element/{elementId}/text
string text = result.Text.Trim();

Expect: The result element to include a record of the keyUp event for the shift key.

Result: The shift key is not represented in the key events propagated to the element.

  • A minimal HTML file (or files) that can be used to reproduce the issue
<!DOCTYPE html>
<html>
<head>
    <title>Testing Keyboard Events</title>
    <script type="text/javascript">
        function displayMessage(message) {
            document.getElementById('resultParagraph').innerHTML = message;
        }

        function appendMessage(message) {
            document.getElementById('resultParagraph').innerHTML += message + " ";
        }
    </script>
</head>
<body>
<div id="resultContainer" height="30">&nbsp;
  <div id="result" style="width:300;height:60">
    <p id="resultParagraph">&nbsp;</p>
  </div>

</div>
                                                                                         

<div>
    <form>
        <input type="text" id="keyReporter" size="80"
               onkeyup="appendMessage('up: ' + event.keyCode)"
               onkeypress="appendMessage('press: ' + event.keyCode)"
               onkeydown="displayMessage(''); appendMessage('down: ' + event.keyCode)" />
    </form>
</div>

</body>
</html>
  • A trace level log from a geckodriver session that demonstrates the problem using the minimal example file.
1492039243905   geckodriver     INFO    Listening on 127.0.0.1:57640
1492039245178   geckodriver::marionette INFO    Starting browser \\?\C:\Program Files (x86)\Nightly\firefox.exe with args ["-marionette"]
1492039247447   geckodriver::marionette DEBUG   Connected to Marionette on localhost:57666
1492039247471   geckodriver::marionette TRACE   ← {"applicationType":"gecko","marionetteProtocol":3}
1492039247496   geckodriver::marionette TRACE   → 269:[0,1,"newSession",{"acceptInsecureCerts":true,"browserName":"firefox","capabilities":{"desiredCapabilities":{"acceptInsecureCerts":true,"browserName":"firefox","platform":"ANY","specificationLevel":1,"version":""}},"platform":"ANY","specificationLevel":1,"version":""}]
1492039248263   geckodriver::marionette TRACE   ← [1,1,null,{"sessionId":"4f3d9847-2fcc-41d9-b176-25a294e4ab09","capabilities":{"browserName":"firefox","browserVersion":"55.0a1","platformName":"windows_nt","platformVersion":"10.0","pageLoadStrategy":"normal","acceptInsecureCerts":true,"timeouts":{"implicit":0,"pageLoad":300000,"script":30000},"rotatable":false,"specificationLevel":1,"moz:processID":20156,"moz:profile":"C:\\Users\\seatt\\AppData\\Local\\Temp\\rust_mozprofile.BQTZ7ZDiAoIp","moz:accessibilityChecks":false}}]
1492039248279   webdriver::server       DEBUG   Returning status Ok
1492039248338   webdriver::server       DEBUG   Returning body {"value": {"sessionId":"4f3d9847-2fcc-41d9-b176-25a294e4ab09","capabilities":{"acceptInsecureCerts":true,"browserName":"firefox","browserVersion":"55.0a1","moz:accessibilityChecks":false,"moz:processID":20156,"moz:profile":"C:\\Users\\seatt\\AppData\\Local\\Temp\\rust_mozprofile.BQTZ7ZDiAoIp","pageLoadStrategy":"normal","platformName":"windows_nt","platformVersion":"10.0","rotatable":false,"specificationLevel":1,"timeouts":{"implicit":0,"pageLoad":300000,"script":30000}}}}
1492039248383   webdriver::server       DEBUG   Got request POST AbsolutePath("/session/4f3d9847-2fcc-41d9-b176-25a294e4ab09/url")
1492039248386   webdriver::command      DEBUG   Got request body {"url":"http://localhost:2310/common/keyboardPage.html"}
1492039248387   geckodriver::marionette TRACE   → 68:[0,2,"get",{"url":"http://localhost:2310/common/keyboardPage.html"}]
1492039248489   geckodriver::marionette TRACE   ← [1,2,null,{}]
1492039248500   webdriver::server       DEBUG   Returning status Ok
1492039248500   webdriver::server       DEBUG   Returning body {"value": {}}
1492039248505   webdriver::server       DEBUG   Got request POST AbsolutePath("/session/4f3d9847-2fcc-41d9-b176-25a294e4ab09/element")
1492039248506   webdriver::command      DEBUG   Got request body {"using":"css selector","value":"#result"}
1492039248507   geckodriver::marionette TRACE   → 62:[0,3,"findElement",{"using":"css selector","value":"#result"}]
1492039248516   geckodriver::marionette TRACE   ← [1,3,null,{"value":{"element-6066-11e4-a52e-4f735466cecf":"fb4ba561-adc0-4518-ae20-d1afe6566fa7","ELEMENT":"fb4ba561-adc0-4518-ae20-d1afe6566fa7"}}]
1492039248517   webdriver::server       DEBUG   Returning status Ok
1492039248517   webdriver::server       DEBUG   Returning body {"value":{"element-6066-11e4-a52e-4f735466cecf":"fb4ba561-adc0-4518-ae20-d1afe6566fa7"}}
1492039248519   webdriver::server       DEBUG   Got request POST AbsolutePath("/session/4f3d9847-2fcc-41d9-b176-25a294e4ab09/element")
1492039248520   webdriver::command      DEBUG   Got request body {"using":"css selector","value":"#keyReporter"}
1492039248520   geckodriver::marionette TRACE   → 67:[0,4,"findElement",{"using":"css selector","value":"#keyReporter"}]
1492039248526   geckodriver::marionette TRACE   ← [1,4,null,{"value":{"element-6066-11e4-a52e-4f735466cecf":"3d17ca03-89c3-456d-be6a-5c42140167da","ELEMENT":"3d17ca03-89c3-456d-be6a-5c42140167da"}}]
1492039248527   webdriver::server       DEBUG   Returning status Ok
1492039248527   webdriver::server       DEBUG   Returning body {"value":{"element-6066-11e4-a52e-4f735466cecf":"3d17ca03-89c3-456d-be6a-5c42140167da"}}
1492039248534   webdriver::server       DEBUG   Got request POST AbsolutePath("/session/4f3d9847-2fcc-41d9-b176-25a294e4ab09/element/3d17ca03-89c3-456d-be6a-5c42140167da/value")
1492039248535   webdriver::command      DEBUG   Got request body {"text":"~","value":["~"]}
1492039248535   geckodriver::marionette TRACE   → 96:[0,5,"sendKeysToElement",{"id":"3d17ca03-89c3-456d-be6a-5c42140167da","text":"~","value":["~"]}]
1492039248628   geckodriver::marionette TRACE   ← [1,5,null,{}]
1492039248665   webdriver::server       DEBUG   Returning status Ok
1492039248665   webdriver::server       DEBUG   Returning body {"value": {}}
1492039248666   webdriver::server       DEBUG   Got request GET AbsolutePath("/session/4f3d9847-2fcc-41d9-b176-25a294e4ab09/element/fb4ba561-adc0-4518-ae20-d1afe6566fa7/text")
1492039248667   geckodriver::marionette TRACE   → 68:[0,6,"getElementText",{"id":"fb4ba561-adc0-4518-ae20-d1afe6566fa7"}]
1492039248681   geckodriver::marionette TRACE   ← [1,6,null,{"value":"down: 192 press: 0 up: 192"}]
1492039248684   webdriver::server       DEBUG   Returning status Ok
1492039248687   webdriver::server       DEBUG   Returning body {"value":"down: 192 press: 0 up: 192"}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions