blob: 37d46fd645d82e0540bb3728a450ba36fcca684b [file] [log] [blame]
[email protected]2a28e0b22011-02-03 21:49:031// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_TEST_WEBDRIVER_AUTOMATION_H_
6#define CHROME_TEST_WEBDRIVER_AUTOMATION_H_
7
[email protected]496e5792011-02-17 17:02:538#include <map>
[email protected]2a28e0b22011-02-03 21:49:039#include <string>
[email protected]496e5792011-02-17 17:02:5310#include <vector>
[email protected]2a28e0b22011-02-03 21:49:0311
[email protected]3b63f8f42011-03-28 01:54:1512#include "base/memory/ref_counted.h"
13#include "base/memory/scoped_ptr.h"
[email protected]2a28e0b22011-02-03 21:49:0314#include "base/task.h"
[email protected]7cc2c912011-02-13 03:11:2115#include "chrome/common/automation_constants.h"
[email protected]7cc2c912011-02-13 03:11:2116#include "ui/base/keycodes/keyboard_codes.h"
[email protected]2a28e0b22011-02-03 21:49:0317
[email protected]ab6bb8e2011-03-03 22:41:1618class AutomationProxy;
[email protected]f6a9d2622011-05-13 17:33:5519class CommandLine;
[email protected]358dc4e2011-02-22 22:07:5720class DictionaryValue;
21class FilePath;
[email protected]6f3b4332011-02-15 23:22:3522class GURL;
[email protected]e4857a212011-03-26 17:14:0223class ListValue;
[email protected]358dc4e2011-02-22 22:07:5724class ProxyLauncher;
[email protected]5fb586a2011-03-08 00:06:2825struct WebKeyEvent;
[email protected]6f3b4332011-02-15 23:22:3526
[email protected]81edbaf2011-02-22 19:31:4827namespace gfx {
28class Point;
29}
30
[email protected]2a28e0b22011-02-03 21:49:0331namespace webdriver {
32
[email protected]2937a8c2011-05-20 15:02:3333class Error;
[email protected]f5aae772011-03-11 22:44:0834class FramePath;
35
[email protected]2a28e0b22011-02-03 21:49:0336// Creates and controls the Chrome instance.
37// This class should be created and accessed on a single thread.
[email protected]6f3b4332011-02-15 23:22:3538// Note: All member functions are void because they are invoked
39// by posting a task from NewRunnableMethod.
[email protected]358dc4e2011-02-22 22:07:5740class Automation {
[email protected]2a28e0b22011-02-03 21:49:0341 public:
[email protected]808d1032011-02-09 20:16:5542 Automation();
43 virtual ~Automation();
[email protected]2a28e0b22011-02-03 21:49:0344
[email protected]c4bdfe652011-05-17 20:14:2045 // Creates a browser, using the specified |browser_exe|.
46 void InitWithBrowserPath(const FilePath& browser_exe,
47 const CommandLine& options,
[email protected]2937a8c2011-05-20 15:02:3348 Error** error);
[email protected]c4bdfe652011-05-17 20:14:2049
50 // Start the system's default Chrome binary.
[email protected]2937a8c2011-05-20 15:02:3351 void Init(const CommandLine& options, Error** error);
[email protected]2a28e0b22011-02-03 21:49:0352
53 // Terminates this session and disconnects its automation proxy. After
54 // invoking this method, the Automation can safely be deleted.
55 void Terminate();
56
57 // Executes the given |script| in the specified frame of the current
58 // tab. |result| will be set to the JSON result. Returns true on success.
[email protected]496e5792011-02-17 17:02:5359 void ExecuteScript(int tab_id,
[email protected]f5aae772011-03-11 22:44:0860 const FramePath& frame_path,
[email protected]2a28e0b22011-02-03 21:49:0361 const std::string& script,
62 std::string* result,
[email protected]2937a8c2011-05-20 15:02:3363 Error** error);
[email protected]2a28e0b22011-02-03 21:49:0364
[email protected]47f21f12011-03-31 15:32:4265 // Sends a webkit key event to the current browser. Waits until the key has
[email protected]7cc2c912011-02-13 03:11:2166 // been processed by the web page.
[email protected]47f21f12011-03-31 15:32:4267 void SendWebKeyEvent(int tab_id,
68 const WebKeyEvent& key_event,
[email protected]2937a8c2011-05-20 15:02:3369 Error** error);
[email protected]47f21f12011-03-31 15:32:4270
71 // Sends an OS level key event to the current browser. Waits until the key
72 // has been processed by the browser.
73 void SendNativeKeyEvent(int tab_id,
74 ui::KeyboardCode key_code,
75 int modifiers,
[email protected]2937a8c2011-05-20 15:02:3376 Error** error);
[email protected]7cc2c912011-02-13 03:11:2177
[email protected]98598afb2011-03-29 19:29:3778 // Captures a snapshot of the tab to the specified path. The PNG will
79 // contain the entire page, including what is not in the current view
80 // on the screen.
[email protected]2937a8c2011-05-20 15:02:3381 void CaptureEntirePageAsPNG(int tab_id, const FilePath& path, Error** error);
[email protected]98598afb2011-03-29 19:29:3782
[email protected]2937a8c2011-05-20 15:02:3383 void NavigateToURL(int tab_id, const std::string& url, Error** error);
84 void GoForward(int tab_id, Error** error);
85 void GoBack(int tab_id, Error** error);
86 void Reload(int tab_id, Error** error);
[email protected]e4857a212011-03-26 17:14:0287
[email protected]2937a8c2011-05-20 15:02:3388 void GetCookies(const std::string& url, ListValue** cookies, Error** error);
[email protected]e4857a212011-03-26 17:14:0289 void GetCookiesDeprecated(
[email protected]496e5792011-02-17 17:02:5390 int tab_id, const GURL& gurl, std::string* cookies, bool* success);
[email protected]e4857a212011-03-26 17:14:0291 void DeleteCookie(const std::string& url,
[email protected]496e5792011-02-17 17:02:5392 const std::string& cookie_name,
[email protected]2937a8c2011-05-20 15:02:3393 Error** error);
[email protected]e4857a212011-03-26 17:14:0294 void DeleteCookieDeprecated(int tab_id,
95 const GURL& gurl,
96 const std::string& cookie_name,
97 bool* success);
[email protected]496e5792011-02-17 17:02:5398 void SetCookie(
[email protected]2937a8c2011-05-20 15:02:3399 const std::string& url, DictionaryValue* cookie_dict, Error** error);
[email protected]e4857a212011-03-26 17:14:02100 void SetCookieDeprecated(
[email protected]496e5792011-02-17 17:02:53101 int tab_id, const GURL& gurl, const std::string& cookie, bool* success);
[email protected]e4857a212011-03-26 17:14:02102
[email protected]2937a8c2011-05-20 15:02:33103 void MouseMove(int tab_id, const gfx::Point& p, Error** error);
[email protected]5fb586a2011-03-08 00:06:28104 void MouseClick(int tab_id,
105 const gfx::Point& p,
106 automation::MouseButton button,
[email protected]2937a8c2011-05-20 15:02:33107 Error** error);
[email protected]81edbaf2011-02-22 19:31:48108 void MouseDrag(int tab_id,
109 const gfx::Point& start,
110 const gfx::Point& end,
[email protected]2937a8c2011-05-20 15:02:33111 Error** error);
112 void MouseButtonDown(int tab_id, const gfx::Point& p, Error** error);
113 void MouseButtonUp(int tab_id, const gfx::Point& p, Error** error);
114 void MouseDoubleClick(int tab_id, const gfx::Point& p, Error** error);
[email protected]496e5792011-02-17 17:02:53115
116 // Get persistent IDs for all the tabs currently open. These IDs can be used
117 // to identify the tab as long as the tab exists.
[email protected]2937a8c2011-05-20 15:02:33118 void GetTabIds(std::vector<int>* tab_ids, Error** error);
[email protected]496e5792011-02-17 17:02:53119
120 // Check if the given tab exists currently.
[email protected]2937a8c2011-05-20 15:02:33121 void DoesTabExist(int tab_id, bool* does_exist, Error** error);
[email protected]496e5792011-02-17 17:02:53122
[email protected]2937a8c2011-05-20 15:02:33123 void CloseTab(int tab_id, Error** error);
[email protected]2a28e0b22011-02-03 21:49:03124
[email protected]16623742011-05-16 20:04:26125 // Gets the active JavaScript modal dialog's message.
[email protected]2937a8c2011-05-20 15:02:33126 void GetAppModalDialogMessage(std::string* message, Error** error);
[email protected]16623742011-05-16 20:04:26127
128 // Accepts or dismisses the active JavaScript modal dialog.
[email protected]2937a8c2011-05-20 15:02:33129 void AcceptOrDismissAppModalDialog(bool accept, Error** error);
[email protected]16623742011-05-16 20:04:26130
131 // Accepts an active prompt JavaScript modal dialog, using the given
132 // prompt text as the result of the prompt.
133 void AcceptPromptAppModalDialog(const std::string& prompt_text,
[email protected]2937a8c2011-05-20 15:02:33134 Error** error);
[email protected]16623742011-05-16 20:04:26135
[email protected]026667662011-02-22 20:48:25136 // Gets the version of the runing browser.
[email protected]e4857a212011-03-26 17:14:02137 void GetBrowserVersion(std::string* version);
[email protected]026667662011-02-22 20:48:25138
[email protected]75895ca2011-04-07 18:12:57139 // Gets the ChromeDriver automation version supported by the automation
140 // server.
[email protected]2937a8c2011-05-20 15:02:33141 void GetChromeDriverAutomationVersion(int* version, Error** error);
[email protected]75895ca2011-04-07 18:12:57142
[email protected]781dbd7d2011-02-25 23:23:27143 // Waits for all tabs to stop loading.
[email protected]2937a8c2011-05-20 15:02:33144 void WaitForAllTabsToStopLoading(Error** error);
[email protected]781dbd7d2011-02-25 23:23:27145
[email protected]2a28e0b22011-02-03 21:49:03146 private:
[email protected]ab6bb8e2011-03-03 22:41:16147 AutomationProxy* automation() const;
[email protected]2937a8c2011-05-20 15:02:33148 Error* GetIndicesForTab(int tab_id, int* browser_index, int* tab_index);
149 Error* CreateChromeError(const std::string& message);
[email protected]2a28e0b22011-02-03 21:49:03150
[email protected]358dc4e2011-02-22 22:07:57151 scoped_ptr<ProxyLauncher> launcher_;
[email protected]ab6bb8e2011-03-03 22:41:16152
[email protected]2a28e0b22011-02-03 21:49:03153 DISALLOW_COPY_AND_ASSIGN(Automation);
154};
155
156} // namespace webdriver
157
158DISABLE_RUNNABLE_METHOD_REFCOUNT(webdriver::Automation);
159
160#endif // CHROME_TEST_WEBDRIVER_AUTOMATION_H_