WebDriver: do not try to set the caret when focusing non text element in send keys...
authorcarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 14 Aug 2018 06:53:03 +0000 (06:53 +0000)
committercarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 14 Aug 2018 06:53:03 +0000 (06:53 +0000)
https://bugs.webkit.org/show_bug.cgi?id=188515

Reviewed by Brian Burg.

It causes a type error exception.

* Session.cpp:
(WebDriver::Session::elementSendKeys):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234838 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebDriver/ChangeLog
Source/WebDriver/Session.cpp

index 47f4e53..f29442a 100644 (file)
@@ -1,5 +1,17 @@
 2018-08-13  Carlos Garcia Campos  <cgarcia@igalia.com>
 
+        WebDriver: do not try to set the caret when focusing non text element in send keys command
+        https://bugs.webkit.org/show_bug.cgi?id=188515
+
+        Reviewed by Brian Burg.
+
+        It causes a type error exception.
+
+        * Session.cpp:
+        (WebDriver::Session::elementSendKeys):
+
+2018-08-13  Carlos Garcia Campos  <cgarcia@igalia.com>
+
         WebDriver: include all capabilities in the new session response
         https://bugs.webkit.org/show_bug.cgi?id=188511
 
index 5c52e15..7583535 100644 (file)
@@ -1732,12 +1732,14 @@ void Session::elementSendKeys(const String& elementID, const String& text, Funct
         // FIXME: move this to an atom.
         static const char focusScript[] =
             "function focus(element) {"
-            "    var doc = element.ownerDocument || element;"
-            "    var prevActiveElement = doc.activeElement;"
+            "    let doc = element.ownerDocument || element;"
+            "    let prevActiveElement = doc.activeElement;"
             "    if (element != prevActiveElement && prevActiveElement)"
             "        prevActiveElement.blur();"
             "    element.focus();"
-            "    if (element != prevActiveElement && element.value && element.value.length && element.setSelectionRange)"
+            "    let tagName = element.tagName.toUpperCase();"
+            "    let isTextElement = tagName === 'TEXTAREA' || (tagName === 'INPUT' && element.type === 'text');"
+            "    if (isTextElement && element.selectionEnd == 0)"
             "        element.setSelectionRange(element.value.length, element.value.length);"
             "    if (element != doc.activeElement)"
             "        throw new Error('cannot focus element');"