blob: d437a05ec38a2736d9aac02b5cd36a17c781037b [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
[email protected]10ba6132011-08-17 15:32:535#ifndef CHROME_TEST_WEBDRIVER_WEBDRIVER_AUTOMATION_H_
6#define CHROME_TEST_WEBDRIVER_WEBDRIVER_AUTOMATION_H_
[email protected]2a28e0b22011-02-03 21:49:037
[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]16b14292011-08-15 17:03:4512#include "base/command_line.h"
[email protected]fcad49452011-06-28 17:11:5713#include "base/file_path.h"
[email protected]3b63f8f42011-03-28 01:54:1514#include "base/memory/ref_counted.h"
15#include "base/memory/scoped_ptr.h"
[email protected]2a28e0b22011-02-03 21:49:0316#include "base/task.h"
[email protected]7cc2c912011-02-13 03:11:2117#include "chrome/common/automation_constants.h"
[email protected]7cc2c912011-02-13 03:11:2118#include "ui/base/keycodes/keyboard_codes.h"
[email protected]2a28e0b22011-02-03 21:49:0319
[email protected]ab6bb8e2011-03-03 22:41:1620class AutomationProxy;
[email protected]358dc4e2011-02-22 22:07:5721class ProxyLauncher;
[email protected]5fb586a2011-03-08 00:06:2822struct WebKeyEvent;
[email protected]6f3b4332011-02-15 23:22:3523
[email protected]f3a1c642011-07-12 19:15:0324namespace base {
25class DictionaryValue;
26class ListValue;
27}
28
[email protected]2a28e0b22011-02-03 21:49:0329namespace webdriver {
30
[email protected]2937a8c2011-05-20 15:02:3331class Error;
[email protected]f5aae772011-03-11 22:44:0832class FramePath;
[email protected]3e981b22011-08-16 15:20:0133class Point;
[email protected]f5aae772011-03-11 22:44:0834
[email protected]2a28e0b22011-02-03 21:49:0335// Creates and controls the Chrome instance.
36// This class should be created and accessed on a single thread.
[email protected]6f3b4332011-02-15 23:22:3537// Note: All member functions are void because they are invoked
38// by posting a task from NewRunnableMethod.
[email protected]358dc4e2011-02-22 22:07:5739class Automation {
[email protected]2a28e0b22011-02-03 21:49:0340 public:
[email protected]16b14292011-08-15 17:03:4541 struct BrowserOptions {
42 BrowserOptions();
43 ~BrowserOptions();
44
[email protected]f0f7cde42011-08-22 16:29:3445 // The command line to use for launching the browser. If no program is
46 // specified, the default browser executable will be used.
[email protected]16b14292011-08-15 17:03:4547 CommandLine command;
[email protected]f0f7cde42011-08-22 16:29:3448
49 // The user data directory to be copied and used. If empty, a temporary
50 // directory will be used.
[email protected]16b14292011-08-15 17:03:4551 FilePath user_data_dir;
[email protected]f0f7cde42011-08-22 16:29:3452
53 // The channel ID of an already running browser to connect to. If empty,
54 // the browser will be launched with an anonymous channel.
[email protected]16b14292011-08-15 17:03:4555 std::string channel_id;
[email protected]f0f7cde42011-08-22 16:29:3456
57 // True if the Chrome process should only be terminated if quit is called.
58 // If false, Chrome will also be terminated if this process is killed or
59 // shutdown.
60 bool detach_process;
[email protected]16b14292011-08-15 17:03:4561 };
62
[email protected]808d1032011-02-09 20:16:5563 Automation();
64 virtual ~Automation();
[email protected]2a28e0b22011-02-03 21:49:0365
[email protected]c4bdfe652011-05-17 20:14:2066 // Start the system's default Chrome binary.
[email protected]16b14292011-08-15 17:03:4567 void Init(const BrowserOptions& options, Error** error);
[email protected]2a28e0b22011-02-03 21:49:0368
69 // Terminates this session and disconnects its automation proxy. After
70 // invoking this method, the Automation can safely be deleted.
71 void Terminate();
72
73 // Executes the given |script| in the specified frame of the current
74 // tab. |result| will be set to the JSON result. Returns true on success.
[email protected]496e5792011-02-17 17:02:5375 void ExecuteScript(int tab_id,
[email protected]f5aae772011-03-11 22:44:0876 const FramePath& frame_path,
[email protected]2a28e0b22011-02-03 21:49:0377 const std::string& script,
78 std::string* result,
[email protected]2937a8c2011-05-20 15:02:3379 Error** error);
[email protected]2a28e0b22011-02-03 21:49:0380
[email protected]47f21f12011-03-31 15:32:4281 // Sends a webkit key event to the current browser. Waits until the key has
[email protected]7cc2c912011-02-13 03:11:2182 // been processed by the web page.
[email protected]47f21f12011-03-31 15:32:4283 void SendWebKeyEvent(int tab_id,
84 const WebKeyEvent& key_event,
[email protected]2937a8c2011-05-20 15:02:3385 Error** error);
[email protected]47f21f12011-03-31 15:32:4286
87 // Sends an OS level key event to the current browser. Waits until the key
88 // has been processed by the browser.
89 void SendNativeKeyEvent(int tab_id,
90 ui::KeyboardCode key_code,
91 int modifiers,
[email protected]2937a8c2011-05-20 15:02:3392 Error** error);
[email protected]7cc2c912011-02-13 03:11:2193
[email protected]fcad49452011-06-28 17:11:5794 // Drag and drop the file paths to the given location.
95 void DragAndDropFilePaths(int tab_id,
[email protected]3e981b22011-08-16 15:20:0196 const Point& location,
[email protected]fcad49452011-06-28 17:11:5797 const std::vector<FilePath::StringType>& paths,
98 Error** error);
99
[email protected]98598afb2011-03-29 19:29:37100 // Captures a snapshot of the tab to the specified path. The PNG will
101 // contain the entire page, including what is not in the current view
102 // on the screen.
[email protected]2937a8c2011-05-20 15:02:33103 void CaptureEntirePageAsPNG(int tab_id, const FilePath& path, Error** error);
[email protected]98598afb2011-03-29 19:29:37104
[email protected]2937a8c2011-05-20 15:02:33105 void NavigateToURL(int tab_id, const std::string& url, Error** error);
[email protected]33ef9382011-08-11 00:04:55106 void NavigateToURLAsync(int tab_id, const std::string& url, Error** error);
[email protected]2937a8c2011-05-20 15:02:33107 void GoForward(int tab_id, Error** error);
108 void GoBack(int tab_id, Error** error);
109 void Reload(int tab_id, Error** error);
[email protected]e4857a212011-03-26 17:14:02110
[email protected]f3a1c642011-07-12 19:15:03111 void GetCookies(const std::string& url,
112 base::ListValue** cookies,
113 Error** error);
[email protected]e4857a212011-03-26 17:14:02114 void DeleteCookie(const std::string& url,
[email protected]496e5792011-02-17 17:02:53115 const std::string& cookie_name,
[email protected]2937a8c2011-05-20 15:02:33116 Error** error);
[email protected]f3a1c642011-07-12 19:15:03117 void SetCookie(const std::string& url,
118 base::DictionaryValue* cookie_dict,
119 Error** error);
[email protected]e4857a212011-03-26 17:14:02120
[email protected]3e981b22011-08-16 15:20:01121 void MouseMove(int tab_id, const Point& p, Error** error);
[email protected]5fb586a2011-03-08 00:06:28122 void MouseClick(int tab_id,
[email protected]3e981b22011-08-16 15:20:01123 const Point& p,
[email protected]5fb586a2011-03-08 00:06:28124 automation::MouseButton button,
[email protected]2937a8c2011-05-20 15:02:33125 Error** error);
[email protected]81edbaf2011-02-22 19:31:48126 void MouseDrag(int tab_id,
[email protected]3e981b22011-08-16 15:20:01127 const Point& start,
128 const Point& end,
[email protected]2937a8c2011-05-20 15:02:33129 Error** error);
[email protected]3e981b22011-08-16 15:20:01130 void MouseButtonDown(int tab_id, const Point& p, Error** error);
131 void MouseButtonUp(int tab_id, const Point& p, Error** error);
132 void MouseDoubleClick(int tab_id, const Point& p, Error** error);
[email protected]496e5792011-02-17 17:02:53133
134 // Get persistent IDs for all the tabs currently open. These IDs can be used
135 // to identify the tab as long as the tab exists.
[email protected]2937a8c2011-05-20 15:02:33136 void GetTabIds(std::vector<int>* tab_ids, Error** error);
[email protected]496e5792011-02-17 17:02:53137
138 // Check if the given tab exists currently.
[email protected]2937a8c2011-05-20 15:02:33139 void DoesTabExist(int tab_id, bool* does_exist, Error** error);
[email protected]496e5792011-02-17 17:02:53140
[email protected]2937a8c2011-05-20 15:02:33141 void CloseTab(int tab_id, Error** error);
[email protected]2a28e0b22011-02-03 21:49:03142
[email protected]16623742011-05-16 20:04:26143 // Gets the active JavaScript modal dialog's message.
[email protected]2937a8c2011-05-20 15:02:33144 void GetAppModalDialogMessage(std::string* message, Error** error);
[email protected]16623742011-05-16 20:04:26145
146 // Accepts or dismisses the active JavaScript modal dialog.
[email protected]2937a8c2011-05-20 15:02:33147 void AcceptOrDismissAppModalDialog(bool accept, Error** error);
[email protected]16623742011-05-16 20:04:26148
149 // Accepts an active prompt JavaScript modal dialog, using the given
150 // prompt text as the result of the prompt.
151 void AcceptPromptAppModalDialog(const std::string& prompt_text,
[email protected]2937a8c2011-05-20 15:02:33152 Error** error);
[email protected]16623742011-05-16 20:04:26153
[email protected]026667662011-02-22 20:48:25154 // Gets the version of the runing browser.
[email protected]e4857a212011-03-26 17:14:02155 void GetBrowserVersion(std::string* version);
[email protected]026667662011-02-22 20:48:25156
[email protected]75895ca2011-04-07 18:12:57157 // Gets the ChromeDriver automation version supported by the automation
158 // server.
[email protected]2937a8c2011-05-20 15:02:33159 void GetChromeDriverAutomationVersion(int* version, Error** error);
[email protected]75895ca2011-04-07 18:12:57160
[email protected]781dbd7d2011-02-25 23:23:27161 // Waits for all tabs to stop loading.
[email protected]2937a8c2011-05-20 15:02:33162 void WaitForAllTabsToStopLoading(Error** error);
[email protected]781dbd7d2011-02-25 23:23:27163
[email protected]f5fe3612011-08-01 17:44:23164 // Install packed extension.
165 void InstallExtension(const FilePath& path, Error** error);
166
[email protected]2a28e0b22011-02-03 21:49:03167 private:
[email protected]ab6bb8e2011-03-03 22:41:16168 AutomationProxy* automation() const;
[email protected]2937a8c2011-05-20 15:02:33169 Error* GetIndicesForTab(int tab_id, int* browser_index, int* tab_index);
[email protected]28c580f2011-05-24 03:41:16170 Error* CompareVersion(int client_build_no,
171 int client_patch_no,
172 bool* is_newer_or_equal);
173 Error* CheckVersion(int client_build_no,
174 int client_patch_no,
175 const std::string& error_msg);
176 Error* CheckAlertsSupported();
177 Error* CheckAdvancedInteractionsSupported();
[email protected]2a28e0b22011-02-03 21:49:03178
[email protected]358dc4e2011-02-22 22:07:57179 scoped_ptr<ProxyLauncher> launcher_;
[email protected]ab6bb8e2011-03-03 22:41:16180
[email protected]2a28e0b22011-02-03 21:49:03181 DISALLOW_COPY_AND_ASSIGN(Automation);
182};
183
184} // namespace webdriver
185
186DISABLE_RUNNABLE_METHOD_REFCOUNT(webdriver::Automation);
187
[email protected]10ba6132011-08-17 15:32:53188#endif // CHROME_TEST_WEBDRIVER_WEBDRIVER_AUTOMATION_H_