Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7510)

Unified Diff: chrome/test/webdriver/session.cc

Issue 6482014: Implement sendKeys webdriver API in ChromeDriver. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/webdriver/session.h ('k') | chrome/test/webdriver/webdriver_key_converter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/webdriver/session.cc
===================================================================
--- chrome/test/webdriver/session.cc (revision 74647)
+++ chrome/test/webdriver/session.cc (working copy)
@@ -22,6 +22,7 @@
#include "chrome/common/chrome_switches.h"
#include "chrome/test/test_launcher_utils.h"
#include "chrome/test/webdriver/utility_functions.h"
+#include "chrome/test/webdriver/webdriver_key_converter.h"
#include "third_party/webdriver/atoms.h"
namespace webdriver {
@@ -127,6 +128,28 @@
return static_cast<ErrorCode>(status);
}
+ErrorCode Session::SendKeys(DictionaryValue* element, const string16& keys) {
+ ListValue args;
+ args.Append(element);
+ // TODO(jleyba): Update this to use the correct atom.
+ std::string script = "document.activeElement.blur();arguments[0].focus();";
+ Value* unscoped_result = NULL;
+ ErrorCode code = ExecuteScript(script, &args, &unscoped_result);
+ scoped_ptr<Value> result(unscoped_result);
+ if (code != kSuccess)
+ return code;
+
+ bool success = false;
+ RunSessionTask(NewRunnableMethod(
+ this,
+ &Session::SendKeysOnSessionThread,
+ keys,
+ &success));
+ if (!success)
+ return kUnknownError;
+ return kSuccess;
+}
+
bool Session::NavigateToURL(const std::string& url) {
bool success = false;
RunSessionTask(NewRunnableMethod(
@@ -211,4 +234,24 @@
automation_.reset();
}
+void Session::SendKeysOnSessionThread(const string16& keys,
+ bool* success) {
+ *success = true;
+ std::vector<WebKeyEvent> key_events;
+ ConvertKeysToWebKeyEvents(keys, &key_events);
+ for (size_t i = 0; i < key_events.size(); ++i) {
+ bool key_success = false;
+ automation_->SendWebKeyEvent(key_events[i], &key_success);
+ if (!key_success) {
+ LOG(ERROR) << "Failed to send key event. Event details:\n"
+ << "Type: " << key_events[i].type << "\n"
+ << "KeyCode: " << key_events[i].key_code << "\n"
+ << "UnmodifiedText: " << key_events[i].unmodified_text << "\n"
+ << "ModifiedText: " << key_events[i].modified_text << "\n"
+ << "Modifiers: " << key_events[i].modifiers << "\n";
+ *success = false;
+ }
+ }
+}
+
} // namespace webdriver
« no previous file with comments | « chrome/test/webdriver/session.h ('k') | chrome/test/webdriver/webdriver_key_converter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698