Skip to content

Commit 406b8da

Browse files
committed
Return NoSuchElement error in IE with incorrect internal IDs
The IE driver, to be spec compliant, must return "no such element" if an invalid internal WebDriver ID is passed in the URL. Previously, the driver would assume that the ID was one that was previously provided by the driver, but now has gone stale. This may cause discomfort for some rare use cases where the incorrect exception is being looked for.
1 parent 034519f commit 406b8da

12 files changed

+38
-11
lines changed

cpp/iedriver/CommandHandlers/ClearElementCommandHandler.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ void ClearElementCommandHandler::ExecuteInternal(
8282
"A JavaScript error was encountered clearing the element. The driver assumes this is because the element is hidden, disabled or read-only, and it must not be to clear the element.");
8383
return;
8484
}
85+
} else if (status_code == ENOSUCHELEMENT) {
86+
response->SetErrorResponse(ERROR_NO_SUCH_ELEMENT, "Invalid internal element ID requested: " + element_id);
87+
return;
8588
} else {
8689
response->SetErrorResponse(status_code, "Element is no longer valid");
8790
return;

cpp/iedriver/CommandHandlers/ClickElementCommandHandler.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,9 @@ void ClickElementCommandHandler::ExecuteInternal(const IECommandExecutor& execut
143143
}
144144
browser_wrapper->set_wait_required(true);
145145
}
146+
} else if (status_code == ENOSUCHELEMENT) {
147+
response->SetErrorResponse(ERROR_NO_SUCH_ELEMENT, "Invalid internal element ID requested: " + element_id);
148+
return;
146149
} else {
147150
response->SetErrorResponse(status_code, "Element is no longer valid");
148151
return;

cpp/iedriver/CommandHandlers/GetElementAttributeCommandHandler.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ void GetElementAttributeCommandHandler::ExecuteInternal(
5757
std::string value = "";
5858
bool is_null;
5959
status_code = element_wrapper->GetAttributeValue(name,
60-
&value,
61-
&is_null);
60+
&value,
61+
&is_null);
6262
if (status_code != WD_SUCCESS) {
6363
response->SetErrorResponse(status_code, "Unable to get attribute");
6464
return;
@@ -71,6 +71,9 @@ void GetElementAttributeCommandHandler::ExecuteInternal(
7171
return;
7272
}
7373
}
74+
} else if (status_code == ENOSUCHELEMENT) {
75+
response->SetErrorResponse(ERROR_NO_SUCH_ELEMENT, "Invalid internal element ID requested: " + element_id);
76+
return;
7477
} else {
7578
response->SetErrorResponse(ERROR_STALE_ELEMENT_REFERENCE, "Element is no longer valid");
7679
return;

cpp/iedriver/CommandHandlers/GetElementPropertyCommandHandler.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ void GetElementPropertyCommandHandler::ExecuteInternal(
7171
return;
7272
}
7373
}
74+
} else if (status_code == ENOSUCHELEMENT) {
75+
response->SetErrorResponse(ERROR_NO_SUCH_ELEMENT, "Invalid internal element ID requested: " + element_id);
76+
return;
7477
} else {
7578
response->SetErrorResponse(ERROR_STALE_ELEMENT_REFERENCE, "Element is no longer valid");
7679
return;

cpp/iedriver/CommandHandlers/GetElementRectCommandHandler.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ void GetElementRectCommandHandler::ExecuteInternal(
103103
response->SetErrorResponse(status_code, "Unable to get element sizes");
104104
return;
105105
}
106+
} else if (status_code == ENOSUCHELEMENT) {
107+
response->SetErrorResponse(ERROR_NO_SUCH_ELEMENT, "Invalid internal element ID requested: " + element_id);
108+
return;
106109
} else {
107110
response->SetErrorResponse(ERROR_STALE_ELEMENT_REFERENCE, "Element is no longer valid");
108111
return;

cpp/iedriver/CommandHandlers/GetElementTagNameCommandHandler.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ void GetElementTagNameCommandHandler::ExecuteInternal(
5252
std::string return_value = element_wrapper->GetTagName();
5353
response->SetSuccessResponse(return_value);
5454
return;
55+
} else if (status_code == ENOSUCHELEMENT) {
56+
response->SetErrorResponse(ERROR_NO_SUCH_ELEMENT, "Invalid internal element ID requested: " + element_id);
57+
return;
5558
} else {
5659
response->SetErrorResponse(ERROR_STALE_ELEMENT_REFERENCE, "Element is no longer valid");
5760
return;

cpp/iedriver/CommandHandlers/GetElementTextCommandHandler.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ void GetElementTextCommandHandler::ExecuteInternal(
7575
"Unable to get element text");
7676
return;
7777
}
78+
} else if (status_code == ENOSUCHELEMENT) {
79+
response->SetErrorResponse(ERROR_NO_SUCH_ELEMENT, "Invalid internal element ID requested: " + element_id);
80+
return;
7881
} else {
7982
response->SetErrorResponse(ERROR_STALE_ELEMENT_REFERENCE, "Element is no longer valid");
8083
return;

cpp/iedriver/CommandHandlers/GetElementValueOfCssPropertyCommandHandler.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ void GetElementValueOfCssPropertyCommandHandler::ExecuteInternal(
8282
"Unable to get element style value");
8383
return;
8484
}
85+
} else if (status_code == ENOSUCHELEMENT) {
86+
response->SetErrorResponse(ERROR_NO_SUCH_ELEMENT, "Invalid internal element ID requested: " + element_id);
87+
return;
8588
} else {
8689
response->SetErrorResponse(ERROR_STALE_ELEMENT_REFERENCE, "Element is no longer valid");
8790
return;

cpp/iedriver/CommandHandlers/IsElementDisplayedCommandHandler.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ void IsElementDisplayedCommandHandler::ExecuteInternal(
5858
"Error determining if element is displayed");
5959
return;
6060
}
61+
} else if (status_code == ENOSUCHELEMENT) {
62+
response->SetErrorResponse(ERROR_NO_SUCH_ELEMENT, "Invalid internal element ID requested: " + element_id);
63+
return;
6164
} else {
6265
response->SetErrorResponse(status_code, "Element is no longer valid");
6366
return;

cpp/iedriver/CommandHandlers/IsElementEnabledCommandHandler.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ void IsElementEnabledCommandHandler::ExecuteInternal(
5050
status_code = this->GetElement(executor, element_id, &element_wrapper);
5151
if (status_code == WD_SUCCESS) {
5252
response->SetSuccessResponse(element_wrapper->IsEnabled());
53+
} else if (status_code == ENOSUCHELEMENT) {
54+
response->SetErrorResponse(ERROR_NO_SUCH_ELEMENT, "Invalid internal element ID requested: " + element_id);
55+
return;
5356
} else {
5457
response->SetErrorResponse(ERROR_STALE_ELEMENT_REFERENCE, "Element is no longer valid");
5558
return;

0 commit comments

Comments
 (0)