Skip to content

Commit

Permalink
Modified IE driver server to more closely follow W3C spec
Browse files Browse the repository at this point in the history
This commit includes a number of changes designed to bring the IE driver
into closer alignment with the W3C WebDriver specification. It provides
no functional changes to the driver, nor does it change any external-
facing API. The changes are:
 * Changed webdriver::Server to examine the response from the newSession
   command for the session ID rather than a two-stage process. The
   webdriver::Server::DispatchCommand method now calls the
   InitializeSession method directly when processing the newSession
   command.
 * Removed the now-obsolete webdriver::Server::CreateSession method.
 * Added a Serialize/Deserialize method pair on the webdriver::Command
   class (renaming the Populate method to Deserialize).
 * Revamped the serialization of webdriver::Command to use 'name' instead
   of 'command' for the command name.
 * Added a session ID member to the webdriver::Command object.
 * Modified the webdriver::Command object to no longer draw distinction
   between parameters passed in as part of the URL substitution and those
   passed in as part of the JSON payload in the body.
 * Modified webdriver::CommandHandler::ExecuteInternal (and all subclass
   implementations to use a single parameters map instead of the dual
   URL tokens/JSON payload parameters maps used previously.
  • Loading branch information
jimevans committed Jul 2, 2014
1 parent 8204b46 commit 6ddf7ce
Show file tree
Hide file tree
Showing 70 changed files with 132 additions and 178 deletions.
1 change: 0 additions & 1 deletion cpp/iedriver/CommandHandlers/AcceptAlertCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ class AcceptAlertCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
BrowserHandle browser_wrapper;
Expand Down
1 change: 0 additions & 1 deletion cpp/iedriver/CommandHandlers/AddCookieCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ class AddCookieCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
ParametersMap::const_iterator cookie_parameter_iterator = command_parameters.find("cookie");
Expand Down
7 changes: 3 additions & 4 deletions cpp/iedriver/CommandHandlers/ClearElementCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,15 @@ class ClearElementCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
if (id_parameter_iterator == locator_parameters.end()) {
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
if (id_parameter_iterator == command_parameters.end()) {
response->SetErrorResponse(400, "Missing parameter in URL: id");
return;
} else {
int status_code = WD_SUCCESS;
std::string element_id = id_parameter_iterator->second;
std::string element_id = id_parameter_iterator->second.asString();

BrowserHandle browser_wrapper;
status_code = executor.GetCurrentBrowser(&browser_wrapper);
Expand Down
7 changes: 3 additions & 4 deletions cpp/iedriver/CommandHandlers/ClickElementCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,15 @@ class ClickElementCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
if (id_parameter_iterator == locator_parameters.end()) {
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
if (id_parameter_iterator == command_parameters.end()) {
response->SetErrorResponse(400, "Missing parameter in URL: id");
return;
} else {
int status_code = WD_SUCCESS;
std::string element_id = id_parameter_iterator->second;
std::string element_id = id_parameter_iterator->second.asString();

BrowserHandle browser_wrapper;
status_code = executor.GetCurrentBrowser(&browser_wrapper);
Expand Down
1 change: 0 additions & 1 deletion cpp/iedriver/CommandHandlers/CloseWindowCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ class CloseWindowCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
// The session should end if the user sends a quit command,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ class DeleteAllCookiesCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
BrowserHandle browser_wrapper;
Expand Down
7 changes: 3 additions & 4 deletions cpp/iedriver/CommandHandlers/DeleteCookieCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,15 @@ class DeleteCookieCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
LocatorMap::const_iterator name_parameter_iterator = locator_parameters.find("name");
if (name_parameter_iterator == locator_parameters.end()) {
ParametersMap::const_iterator name_parameter_iterator = command_parameters.find("name");
if (name_parameter_iterator == command_parameters.end()) {
response->SetErrorResponse(400, "Missing parameter in URL: name");
return;
}

std::string cookie_name = name_parameter_iterator->second;
std::string cookie_name = name_parameter_iterator->second.asString();
BrowserHandle browser_wrapper;
int status_code = executor.GetCurrentBrowser(&browser_wrapper);
if (status_code != WD_SUCCESS) {
Expand Down
1 change: 0 additions & 1 deletion cpp/iedriver/CommandHandlers/DismissAlertCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ class DismissAlertCommandHandler : public AcceptAlertCommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
BrowserHandle browser_wrapper;
Expand Down
13 changes: 6 additions & 7 deletions cpp/iedriver/CommandHandlers/ElementEqualsCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,21 +30,20 @@ class ElementEqualsCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
LocatorMap::const_iterator other_parameter_iterator = locator_parameters.find("other");
if (id_parameter_iterator == locator_parameters.end()) {
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
ParametersMap::const_iterator other_parameter_iterator = command_parameters.find("other");
if (id_parameter_iterator == command_parameters.end()) {
response->SetErrorResponse(400, "Missing parameter in URL: id");
return;
}
else if (other_parameter_iterator == locator_parameters.end()) {
else if (other_parameter_iterator == command_parameters.end()) {
response->SetErrorResponse(400, "Missing parameter in URL: other");
return;
} else {
std::string element_id = id_parameter_iterator->second;
std::string other_element_id = other_parameter_iterator->second;
std::string element_id = id_parameter_iterator->second.asString();
std::string other_element_id = other_parameter_iterator->second.asString();

BrowserHandle browser_wrapper;
int status_code = executor.GetCurrentBrowser(&browser_wrapper);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ class ExecuteAsyncScriptCommandHandler : public ExecuteScriptCommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
ParametersMap::const_iterator script_parameter_iterator = command_parameters.find("script");
Expand Down
1 change: 0 additions & 1 deletion cpp/iedriver/CommandHandlers/ExecuteScriptCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ class ExecuteScriptCommandHandler : public IECommandHandler {

protected:
virtual void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
ParametersMap::const_iterator script_parameter_iterator = command_parameters.find("script");
Expand Down
7 changes: 3 additions & 4 deletions cpp/iedriver/CommandHandlers/FindChildElementCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,12 @@ class FindChildElementCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
ParametersMap::const_iterator using_parameter_iterator = command_parameters.find("using");
ParametersMap::const_iterator value_parameter_iterator = command_parameters.find("value");
if (id_parameter_iterator == locator_parameters.end()) {
if (id_parameter_iterator == command_parameters.end()) {
response->SetErrorResponse(400, "Missing parameter in URL: id");
return;
} else if (using_parameter_iterator == command_parameters.end()) {
Expand All @@ -49,7 +48,7 @@ class FindChildElementCommandHandler : public IECommandHandler {
} else {
std::string mechanism = using_parameter_iterator->second.asString();
std::string value = value_parameter_iterator->second.asString();
std::string element_id = id_parameter_iterator->second;
std::string element_id = id_parameter_iterator->second.asString();

ElementHandle parent_element_wrapper;
int status_code = this->GetElement(executor,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,12 @@ class FindChildElementsCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
ParametersMap::const_iterator using_parameter_iterator = command_parameters.find("using");
ParametersMap::const_iterator value_parameter_iterator = command_parameters.find("value");
if (id_parameter_iterator == locator_parameters.end()) {
if (id_parameter_iterator == command_parameters.end()) {
response->SetErrorResponse(400, "Missing parameter in URL: id");
return;
} else if (using_parameter_iterator == command_parameters.end()) {
Expand All @@ -49,7 +48,7 @@ class FindChildElementsCommandHandler : public IECommandHandler {
} else {
std::string mechanism = using_parameter_iterator->second.asString();
std::string value = value_parameter_iterator->second.asString();
std::string element_id = id_parameter_iterator->second;
std::string element_id = id_parameter_iterator->second.asString();

ElementHandle parent_element_wrapper;
int status_code = this->GetElement(executor,
Expand Down
1 change: 0 additions & 1 deletion cpp/iedriver/CommandHandlers/FindElementCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ class FindElementCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
ParametersMap::const_iterator using_parameter_iterator = command_parameters.find("using");
Expand Down
1 change: 0 additions & 1 deletion cpp/iedriver/CommandHandlers/FindElementsCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ class FindElementsCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
ParametersMap::const_iterator using_parameter_iterator = command_parameters.find("using");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ class GetActiveElementCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
BrowserHandle browser_wrapper;
Expand Down
1 change: 0 additions & 1 deletion cpp/iedriver/CommandHandlers/GetAlertTextCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ class GetAlertTextCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
BrowserHandle browser_wrapper;
Expand Down
1 change: 0 additions & 1 deletion cpp/iedriver/CommandHandlers/GetAllCookiesCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ class GetAllCookiesCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
Json::Value response_value(Json::arrayValue);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ class GetAllWindowHandlesCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
Json::Value handles(Json::arrayValue);
Expand Down
1 change: 0 additions & 1 deletion cpp/iedriver/CommandHandlers/GetCurrentUrlCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ class GetCurrentUrlCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
BrowserHandle browser_wrapper;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ class GetCurrentWindowHandleCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
std::string current_handle = executor.current_browser_id();
Expand Down
13 changes: 6 additions & 7 deletions cpp/iedriver/CommandHandlers/GetElementAttributeCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,20 +30,19 @@ class GetElementAttributeCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
LocatorMap::const_iterator name_parameter_iterator = locator_parameters.find("name");
if (id_parameter_iterator == locator_parameters.end()) {
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
ParametersMap::const_iterator name_parameter_iterator = command_parameters.find("name");
if (id_parameter_iterator == command_parameters.end()) {
response->SetErrorResponse(400, "Missing parameter in URL: id");
return;
} else if (name_parameter_iterator == locator_parameters.end()) {
} else if (name_parameter_iterator == command_parameters.end()) {
response->SetErrorResponse(400, "Missing parameter in URL: name");
return;
} else {
std::string element_id = id_parameter_iterator->second;
std::string name = name_parameter_iterator->second;
std::string element_id = id_parameter_iterator->second.asString();
std::string name = name_parameter_iterator->second.asString();

BrowserHandle browser_wrapper;
int status_code = executor.GetCurrentBrowser(&browser_wrapper);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,14 @@ class GetElementLocationCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
if (id_parameter_iterator == locator_parameters.end()) {
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
if (id_parameter_iterator == command_parameters.end()) {
response->SetErrorResponse(400, "Missing parameter in URL: id");
return;
} else {
std::string element_id = id_parameter_iterator->second;
std::string element_id = id_parameter_iterator->second.asString();

BrowserHandle browser_wrapper;
int status_code = executor.GetCurrentBrowser(&browser_wrapper);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,14 @@ class GetElementLocationOnceScrolledIntoViewCommandHandler : public IECommandHan

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
if (id_parameter_iterator == locator_parameters.end()) {
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
if (id_parameter_iterator == command_parameters.end()) {
response->SetErrorResponse(400, "Missing parameter in URL: id");
return;
} else {
std::string element_id = id_parameter_iterator->second;
std::string element_id = id_parameter_iterator->second.asString();

BrowserHandle browser_wrapper;
int status_code = executor.GetCurrentBrowser(&browser_wrapper);
Expand Down
7 changes: 3 additions & 4 deletions cpp/iedriver/CommandHandlers/GetElementSizeCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,14 @@ class GetElementSizeCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
if (id_parameter_iterator == locator_parameters.end()) {
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
if (id_parameter_iterator == command_parameters.end()) {
response->SetErrorResponse(400, "Missing parameter in URL: id");
return;
} else {
std::string element_id = id_parameter_iterator->second;
std::string element_id = id_parameter_iterator->second.asString();

BrowserHandle browser_wrapper;
int status_code = executor.GetCurrentBrowser(&browser_wrapper);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,14 @@ class GetElementTagNameCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
if (id_parameter_iterator == locator_parameters.end()) {
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
if (id_parameter_iterator == command_parameters.end()) {
response->SetErrorResponse(400, "Missing parameter in URL: id");
return;
} else {
std::string element_id = id_parameter_iterator->second;
std::string element_id = id_parameter_iterator->second.asString();
ElementHandle element_wrapper;
int status_code = this->GetElement(executor, element_id, &element_wrapper);
if (status_code == WD_SUCCESS) {
Expand Down
7 changes: 3 additions & 4 deletions cpp/iedriver/CommandHandlers/GetElementTextCommandHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,14 @@ class GetElementTextCommandHandler : public IECommandHandler {

protected:
void ExecuteInternal(const IECommandExecutor& executor,
const LocatorMap& locator_parameters,
const ParametersMap& command_parameters,
Response* response) {
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
if (id_parameter_iterator == locator_parameters.end()) {
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
if (id_parameter_iterator == command_parameters.end()) {
response->SetErrorResponse(400, "Missing parameter in URL: id");
return;
} else {
std::string element_id = id_parameter_iterator->second;
std::string element_id = id_parameter_iterator->second.asString();

BrowserHandle browser_wrapper;
int status_code = executor.GetCurrentBrowser(&browser_wrapper);
Expand Down
Loading

0 comments on commit 6ddf7ce

Please sign in to comment.