org.openqa.selenium.remote.W3CHandshakeResponse Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of selenium-remote-driver Show documentation
Show all versions of selenium-remote-driver Show documentation
Selenium automates browsers. That's it! What you do with that power is entirely up to you.
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.openqa.selenium.remote;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
import org.openqa.selenium.WebDriverException;
class W3CHandshakeResponse implements HandshakeResponse {
@Override
public Function errorHandler() {
return tuple -> {
Object rawValue = tuple.getData().get("value");
if (!(rawValue instanceof Map)) {
return null;
}
Map, ?> rawMap = (Map, ?>) rawValue;
Object rawMessage = rawMap.get("message");
Object rawError = rawMap.get("error");
Object rawStackTrace = rawMap.get("stacktrace");
rawStackTrace = rawStackTrace == null ? "" : rawStackTrace;
if (!(rawError instanceof String) || (!(rawMessage instanceof String))) {
return null;
}
if (!(rawStackTrace instanceof String)) {
rawStackTrace = String.valueOf(rawStackTrace);
}
Response response = new Response();
response.setState((String) rawError);
response.setStatus(
new ErrorCodes().toStatus((String) rawError, Optional.of(tuple.getStatusCode())));
Class extends WebDriverException> type =
new ErrorCodes().getExceptionType((String) rawError);
try {
WebDriverException exception =
type.getConstructor(String.class).newInstance((String) rawMessage);
exception.addInfo("remote stacktrace", (String) rawStackTrace);
response.setValue(exception);
} catch (ReflectiveOperationException e) {
response.setValue(rawMessage);
}
new ErrorHandler().throwIfResponseFailed(response, tuple.getRequestDuration().toMillis());
// We never get this far
return null;
};
}
@Override
public Function successHandler() {
return tuple -> {
Object rawValue = tuple.getData().get("value");
if (!(rawValue instanceof Map)) {
return null;
}
@SuppressWarnings("unchecked")
Map