Skip to content

Commit 6ddf7ce

Browse files
committed
Modified IE driver server to more closely follow W3C spec
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.
1 parent 8204b46 commit 6ddf7ce

File tree

70 files changed

+132
-178
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+132
-178
lines changed

cpp/iedriver/CommandHandlers/AcceptAlertCommandHandler.h

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ class AcceptAlertCommandHandler : public IECommandHandler {
3131

3232
protected:
3333
void ExecuteInternal(const IECommandExecutor& executor,
34-
const LocatorMap& locator_parameters,
3534
const ParametersMap& command_parameters,
3635
Response* response) {
3736
BrowserHandle browser_wrapper;

cpp/iedriver/CommandHandlers/AddCookieCommandHandler.h

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ class AddCookieCommandHandler : public IECommandHandler {
3131

3232
protected:
3333
void ExecuteInternal(const IECommandExecutor& executor,
34-
const LocatorMap& locator_parameters,
3534
const ParametersMap& command_parameters,
3635
Response* response) {
3736
ParametersMap::const_iterator cookie_parameter_iterator = command_parameters.find("cookie");

cpp/iedriver/CommandHandlers/ClearElementCommandHandler.h

+3-4
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,15 @@ class ClearElementCommandHandler : public IECommandHandler {
3131

3232
protected:
3333
void ExecuteInternal(const IECommandExecutor& executor,
34-
const LocatorMap& locator_parameters,
3534
const ParametersMap& command_parameters,
3635
Response* response) {
37-
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
38-
if (id_parameter_iterator == locator_parameters.end()) {
36+
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
37+
if (id_parameter_iterator == command_parameters.end()) {
3938
response->SetErrorResponse(400, "Missing parameter in URL: id");
4039
return;
4140
} else {
4241
int status_code = WD_SUCCESS;
43-
std::string element_id = id_parameter_iterator->second;
42+
std::string element_id = id_parameter_iterator->second.asString();
4443

4544
BrowserHandle browser_wrapper;
4645
status_code = executor.GetCurrentBrowser(&browser_wrapper);

cpp/iedriver/CommandHandlers/ClickElementCommandHandler.h

+3-4
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,15 @@ class ClickElementCommandHandler : public IECommandHandler {
3434

3535
protected:
3636
void ExecuteInternal(const IECommandExecutor& executor,
37-
const LocatorMap& locator_parameters,
3837
const ParametersMap& command_parameters,
3938
Response* response) {
40-
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
41-
if (id_parameter_iterator == locator_parameters.end()) {
39+
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
40+
if (id_parameter_iterator == command_parameters.end()) {
4241
response->SetErrorResponse(400, "Missing parameter in URL: id");
4342
return;
4443
} else {
4544
int status_code = WD_SUCCESS;
46-
std::string element_id = id_parameter_iterator->second;
45+
std::string element_id = id_parameter_iterator->second.asString();
4746

4847
BrowserHandle browser_wrapper;
4948
status_code = executor.GetCurrentBrowser(&browser_wrapper);

cpp/iedriver/CommandHandlers/CloseWindowCommandHandler.h

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ class CloseWindowCommandHandler : public IECommandHandler {
3030

3131
protected:
3232
void ExecuteInternal(const IECommandExecutor& executor,
33-
const LocatorMap& locator_parameters,
3433
const ParametersMap& command_parameters,
3534
Response* response) {
3635
// The session should end if the user sends a quit command,

cpp/iedriver/CommandHandlers/DeleteAllCookiesCommandHandler.h

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ class DeleteAllCookiesCommandHandler : public IECommandHandler {
3030

3131
protected:
3232
void ExecuteInternal(const IECommandExecutor& executor,
33-
const LocatorMap& locator_parameters,
3433
const ParametersMap& command_parameters,
3534
Response* response) {
3635
BrowserHandle browser_wrapper;

cpp/iedriver/CommandHandlers/DeleteCookieCommandHandler.h

+3-4
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,15 @@ class DeleteCookieCommandHandler : public IECommandHandler {
3030

3131
protected:
3232
void ExecuteInternal(const IECommandExecutor& executor,
33-
const LocatorMap& locator_parameters,
3433
const ParametersMap& command_parameters,
3534
Response* response) {
36-
LocatorMap::const_iterator name_parameter_iterator = locator_parameters.find("name");
37-
if (name_parameter_iterator == locator_parameters.end()) {
35+
ParametersMap::const_iterator name_parameter_iterator = command_parameters.find("name");
36+
if (name_parameter_iterator == command_parameters.end()) {
3837
response->SetErrorResponse(400, "Missing parameter in URL: name");
3938
return;
4039
}
4140

42-
std::string cookie_name = name_parameter_iterator->second;
41+
std::string cookie_name = name_parameter_iterator->second.asString();
4342
BrowserHandle browser_wrapper;
4443
int status_code = executor.GetCurrentBrowser(&browser_wrapper);
4544
if (status_code != WD_SUCCESS) {

cpp/iedriver/CommandHandlers/DismissAlertCommandHandler.h

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ class DismissAlertCommandHandler : public AcceptAlertCommandHandler {
3030

3131
protected:
3232
void ExecuteInternal(const IECommandExecutor& executor,
33-
const LocatorMap& locator_parameters,
3433
const ParametersMap& command_parameters,
3534
Response* response) {
3635
BrowserHandle browser_wrapper;

cpp/iedriver/CommandHandlers/ElementEqualsCommandHandler.h

+6-7
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,20 @@ class ElementEqualsCommandHandler : public IECommandHandler {
3030

3131
protected:
3232
void ExecuteInternal(const IECommandExecutor& executor,
33-
const LocatorMap& locator_parameters,
3433
const ParametersMap& command_parameters,
3534
Response* response) {
36-
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
37-
LocatorMap::const_iterator other_parameter_iterator = locator_parameters.find("other");
38-
if (id_parameter_iterator == locator_parameters.end()) {
35+
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
36+
ParametersMap::const_iterator other_parameter_iterator = command_parameters.find("other");
37+
if (id_parameter_iterator == command_parameters.end()) {
3938
response->SetErrorResponse(400, "Missing parameter in URL: id");
4039
return;
4140
}
42-
else if (other_parameter_iterator == locator_parameters.end()) {
41+
else if (other_parameter_iterator == command_parameters.end()) {
4342
response->SetErrorResponse(400, "Missing parameter in URL: other");
4443
return;
4544
} else {
46-
std::string element_id = id_parameter_iterator->second;
47-
std::string other_element_id = other_parameter_iterator->second;
45+
std::string element_id = id_parameter_iterator->second.asString();
46+
std::string other_element_id = other_parameter_iterator->second.asString();
4847

4948
BrowserHandle browser_wrapper;
5049
int status_code = executor.GetCurrentBrowser(&browser_wrapper);

cpp/iedriver/CommandHandlers/ExecuteAsyncScriptCommandHandler.h

-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ class ExecuteAsyncScriptCommandHandler : public ExecuteScriptCommandHandler {
3333

3434
protected:
3535
void ExecuteInternal(const IECommandExecutor& executor,
36-
const LocatorMap& locator_parameters,
3736
const ParametersMap& command_parameters,
3837
Response* response) {
3938
ParametersMap::const_iterator script_parameter_iterator = command_parameters.find("script");

cpp/iedriver/CommandHandlers/ExecuteScriptCommandHandler.h

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ class ExecuteScriptCommandHandler : public IECommandHandler {
3030

3131
protected:
3232
virtual void ExecuteInternal(const IECommandExecutor& executor,
33-
const LocatorMap& locator_parameters,
3433
const ParametersMap& command_parameters,
3534
Response* response) {
3635
ParametersMap::const_iterator script_parameter_iterator = command_parameters.find("script");

cpp/iedriver/CommandHandlers/FindChildElementCommandHandler.h

+3-4
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,12 @@ class FindChildElementCommandHandler : public IECommandHandler {
3131

3232
protected:
3333
void ExecuteInternal(const IECommandExecutor& executor,
34-
const LocatorMap& locator_parameters,
3534
const ParametersMap& command_parameters,
3635
Response* response) {
37-
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
36+
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
3837
ParametersMap::const_iterator using_parameter_iterator = command_parameters.find("using");
3938
ParametersMap::const_iterator value_parameter_iterator = command_parameters.find("value");
40-
if (id_parameter_iterator == locator_parameters.end()) {
39+
if (id_parameter_iterator == command_parameters.end()) {
4140
response->SetErrorResponse(400, "Missing parameter in URL: id");
4241
return;
4342
} else if (using_parameter_iterator == command_parameters.end()) {
@@ -49,7 +48,7 @@ class FindChildElementCommandHandler : public IECommandHandler {
4948
} else {
5049
std::string mechanism = using_parameter_iterator->second.asString();
5150
std::string value = value_parameter_iterator->second.asString();
52-
std::string element_id = id_parameter_iterator->second;
51+
std::string element_id = id_parameter_iterator->second.asString();
5352

5453
ElementHandle parent_element_wrapper;
5554
int status_code = this->GetElement(executor,

cpp/iedriver/CommandHandlers/FindChildElementsCommandHandler.h

+3-4
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,12 @@ class FindChildElementsCommandHandler : public IECommandHandler {
3131

3232
protected:
3333
void ExecuteInternal(const IECommandExecutor& executor,
34-
const LocatorMap& locator_parameters,
3534
const ParametersMap& command_parameters,
3635
Response* response) {
37-
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
36+
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
3837
ParametersMap::const_iterator using_parameter_iterator = command_parameters.find("using");
3938
ParametersMap::const_iterator value_parameter_iterator = command_parameters.find("value");
40-
if (id_parameter_iterator == locator_parameters.end()) {
39+
if (id_parameter_iterator == command_parameters.end()) {
4140
response->SetErrorResponse(400, "Missing parameter in URL: id");
4241
return;
4342
} else if (using_parameter_iterator == command_parameters.end()) {
@@ -49,7 +48,7 @@ class FindChildElementsCommandHandler : public IECommandHandler {
4948
} else {
5049
std::string mechanism = using_parameter_iterator->second.asString();
5150
std::string value = value_parameter_iterator->second.asString();
52-
std::string element_id = id_parameter_iterator->second;
51+
std::string element_id = id_parameter_iterator->second.asString();
5352

5453
ElementHandle parent_element_wrapper;
5554
int status_code = this->GetElement(executor,

cpp/iedriver/CommandHandlers/FindElementCommandHandler.h

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ class FindElementCommandHandler : public IECommandHandler {
3131

3232
protected:
3333
void ExecuteInternal(const IECommandExecutor& executor,
34-
const LocatorMap& locator_parameters,
3534
const ParametersMap& command_parameters,
3635
Response* response) {
3736
ParametersMap::const_iterator using_parameter_iterator = command_parameters.find("using");

cpp/iedriver/CommandHandlers/FindElementsCommandHandler.h

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ class FindElementsCommandHandler : public IECommandHandler {
3131

3232
protected:
3333
void ExecuteInternal(const IECommandExecutor& executor,
34-
const LocatorMap& locator_parameters,
3534
const ParametersMap& command_parameters,
3635
Response* response) {
3736
ParametersMap::const_iterator using_parameter_iterator = command_parameters.find("using");

cpp/iedriver/CommandHandlers/GetActiveElementCommandHandler.h

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ class GetActiveElementCommandHandler : public IECommandHandler {
3030

3131
protected:
3232
void ExecuteInternal(const IECommandExecutor& executor,
33-
const LocatorMap& locator_parameters,
3433
const ParametersMap& command_parameters,
3534
Response* response) {
3635
BrowserHandle browser_wrapper;

cpp/iedriver/CommandHandlers/GetAlertTextCommandHandler.h

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ class GetAlertTextCommandHandler : public IECommandHandler {
3131

3232
protected:
3333
void ExecuteInternal(const IECommandExecutor& executor,
34-
const LocatorMap& locator_parameters,
3534
const ParametersMap& command_parameters,
3635
Response* response) {
3736
BrowserHandle browser_wrapper;

cpp/iedriver/CommandHandlers/GetAllCookiesCommandHandler.h

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ class GetAllCookiesCommandHandler : public IECommandHandler {
3030

3131
protected:
3232
void ExecuteInternal(const IECommandExecutor& executor,
33-
const LocatorMap& locator_parameters,
3433
const ParametersMap& command_parameters,
3534
Response* response) {
3635
Json::Value response_value(Json::arrayValue);

cpp/iedriver/CommandHandlers/GetAllWindowHandlesCommandHandler.h

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ class GetAllWindowHandlesCommandHandler : public IECommandHandler {
3030

3131
protected:
3232
void ExecuteInternal(const IECommandExecutor& executor,
33-
const LocatorMap& locator_parameters,
3433
const ParametersMap& command_parameters,
3534
Response* response) {
3635
Json::Value handles(Json::arrayValue);

cpp/iedriver/CommandHandlers/GetCurrentUrlCommandHandler.h

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ class GetCurrentUrlCommandHandler : public IECommandHandler {
3131

3232
protected:
3333
void ExecuteInternal(const IECommandExecutor& executor,
34-
const LocatorMap& locator_parameters,
3534
const ParametersMap& command_parameters,
3635
Response* response) {
3736
BrowserHandle browser_wrapper;

cpp/iedriver/CommandHandlers/GetCurrentWindowHandleCommandHandler.h

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ class GetCurrentWindowHandleCommandHandler : public IECommandHandler {
3030

3131
protected:
3232
void ExecuteInternal(const IECommandExecutor& executor,
33-
const LocatorMap& locator_parameters,
3433
const ParametersMap& command_parameters,
3534
Response* response) {
3635
std::string current_handle = executor.current_browser_id();

cpp/iedriver/CommandHandlers/GetElementAttributeCommandHandler.h

+6-7
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,19 @@ class GetElementAttributeCommandHandler : public IECommandHandler {
3030

3131
protected:
3232
void ExecuteInternal(const IECommandExecutor& executor,
33-
const LocatorMap& locator_parameters,
3433
const ParametersMap& command_parameters,
3534
Response* response) {
36-
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
37-
LocatorMap::const_iterator name_parameter_iterator = locator_parameters.find("name");
38-
if (id_parameter_iterator == locator_parameters.end()) {
35+
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
36+
ParametersMap::const_iterator name_parameter_iterator = command_parameters.find("name");
37+
if (id_parameter_iterator == command_parameters.end()) {
3938
response->SetErrorResponse(400, "Missing parameter in URL: id");
4039
return;
41-
} else if (name_parameter_iterator == locator_parameters.end()) {
40+
} else if (name_parameter_iterator == command_parameters.end()) {
4241
response->SetErrorResponse(400, "Missing parameter in URL: name");
4342
return;
4443
} else {
45-
std::string element_id = id_parameter_iterator->second;
46-
std::string name = name_parameter_iterator->second;
44+
std::string element_id = id_parameter_iterator->second.asString();
45+
std::string name = name_parameter_iterator->second.asString();
4746

4847
BrowserHandle browser_wrapper;
4948
int status_code = executor.GetCurrentBrowser(&browser_wrapper);

cpp/iedriver/CommandHandlers/GetElementLocationCommandHandler.h

+3-4
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,14 @@ class GetElementLocationCommandHandler : public IECommandHandler {
3030

3131
protected:
3232
void ExecuteInternal(const IECommandExecutor& executor,
33-
const LocatorMap& locator_parameters,
3433
const ParametersMap& command_parameters,
3534
Response* response) {
36-
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
37-
if (id_parameter_iterator == locator_parameters.end()) {
35+
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
36+
if (id_parameter_iterator == command_parameters.end()) {
3837
response->SetErrorResponse(400, "Missing parameter in URL: id");
3938
return;
4039
} else {
41-
std::string element_id = id_parameter_iterator->second;
40+
std::string element_id = id_parameter_iterator->second.asString();
4241

4342
BrowserHandle browser_wrapper;
4443
int status_code = executor.GetCurrentBrowser(&browser_wrapper);

cpp/iedriver/CommandHandlers/GetElementLocationOnceScrolledIntoViewCommandHandler.h

+3-4
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,14 @@ class GetElementLocationOnceScrolledIntoViewCommandHandler : public IECommandHan
3131

3232
protected:
3333
void ExecuteInternal(const IECommandExecutor& executor,
34-
const LocatorMap& locator_parameters,
3534
const ParametersMap& command_parameters,
3635
Response* response) {
37-
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
38-
if (id_parameter_iterator == locator_parameters.end()) {
36+
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
37+
if (id_parameter_iterator == command_parameters.end()) {
3938
response->SetErrorResponse(400, "Missing parameter in URL: id");
4039
return;
4140
} else {
42-
std::string element_id = id_parameter_iterator->second;
41+
std::string element_id = id_parameter_iterator->second.asString();
4342

4443
BrowserHandle browser_wrapper;
4544
int status_code = executor.GetCurrentBrowser(&browser_wrapper);

cpp/iedriver/CommandHandlers/GetElementSizeCommandHandler.h

+3-4
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,14 @@ class GetElementSizeCommandHandler : public IECommandHandler {
3131

3232
protected:
3333
void ExecuteInternal(const IECommandExecutor& executor,
34-
const LocatorMap& locator_parameters,
3534
const ParametersMap& command_parameters,
3635
Response* response) {
37-
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
38-
if (id_parameter_iterator == locator_parameters.end()) {
36+
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
37+
if (id_parameter_iterator == command_parameters.end()) {
3938
response->SetErrorResponse(400, "Missing parameter in URL: id");
4039
return;
4140
} else {
42-
std::string element_id = id_parameter_iterator->second;
41+
std::string element_id = id_parameter_iterator->second.asString();
4342

4443
BrowserHandle browser_wrapper;
4544
int status_code = executor.GetCurrentBrowser(&browser_wrapper);

cpp/iedriver/CommandHandlers/GetElementTagNameCommandHandler.h

+3-4
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,14 @@ class GetElementTagNameCommandHandler : public IECommandHandler {
3030

3131
protected:
3232
void ExecuteInternal(const IECommandExecutor& executor,
33-
const LocatorMap& locator_parameters,
3433
const ParametersMap& command_parameters,
3534
Response* response) {
36-
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
37-
if (id_parameter_iterator == locator_parameters.end()) {
35+
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
36+
if (id_parameter_iterator == command_parameters.end()) {
3837
response->SetErrorResponse(400, "Missing parameter in URL: id");
3938
return;
4039
} else {
41-
std::string element_id = id_parameter_iterator->second;
40+
std::string element_id = id_parameter_iterator->second.asString();
4241
ElementHandle element_wrapper;
4342
int status_code = this->GetElement(executor, element_id, &element_wrapper);
4443
if (status_code == WD_SUCCESS) {

cpp/iedriver/CommandHandlers/GetElementTextCommandHandler.h

+3-4
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,14 @@ class GetElementTextCommandHandler : public IECommandHandler {
3131

3232
protected:
3333
void ExecuteInternal(const IECommandExecutor& executor,
34-
const LocatorMap& locator_parameters,
3534
const ParametersMap& command_parameters,
3635
Response* response) {
37-
LocatorMap::const_iterator id_parameter_iterator = locator_parameters.find("id");
38-
if (id_parameter_iterator == locator_parameters.end()) {
36+
ParametersMap::const_iterator id_parameter_iterator = command_parameters.find("id");
37+
if (id_parameter_iterator == command_parameters.end()) {
3938
response->SetErrorResponse(400, "Missing parameter in URL: id");
4039
return;
4140
} else {
42-
std::string element_id = id_parameter_iterator->second;
41+
std::string element_id = id_parameter_iterator->second.asString();
4342

4443
BrowserHandle browser_wrapper;
4544
int status_code = executor.GetCurrentBrowser(&browser_wrapper);

0 commit comments

Comments
 (0)