Skip to content

Commit dcb7924

Browse files
committed
[java] Fixing exception message conversion in CDP javascript exception listener
1 parent df5da76 commit dcb7924

File tree

5 files changed

+78
-4
lines changed

5 files changed

+78
-4
lines changed

java/client/src/org/openqa/selenium/devtools/v86/V86Events.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,14 @@ protected ConsoleEvent toConsoleEvent(ConsoleAPICalled event) {
8282
protected JavascriptException toJsException(ExceptionThrown event) {
8383
ExceptionDetails details = event.getExceptionDetails();
8484
Optional<StackTrace> maybeTrace = details.getStackTrace();
85+
Optional<org.openqa.selenium.devtools.v86.runtime.model.RemoteObject>
86+
maybeException = details.getException();
8587

86-
JavascriptException exception = new JavascriptException(event.getExceptionDetails().getText());
88+
String message = maybeException
89+
.flatMap(obj -> obj.getDescription().map(String::toString))
90+
.orElseGet(details::getText);
91+
92+
JavascriptException exception = new JavascriptException(message);
8793

8894
if (!maybeTrace.isPresent()) {
8995
StackTraceElement element = new StackTraceElement(

java/client/src/org/openqa/selenium/devtools/v87/V87Events.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,14 @@ protected ConsoleEvent toConsoleEvent(ConsoleAPICalled event) {
8282
protected JavascriptException toJsException(ExceptionThrown event) {
8383
ExceptionDetails details = event.getExceptionDetails();
8484
Optional<StackTrace> maybeTrace = details.getStackTrace();
85+
Optional<org.openqa.selenium.devtools.v87.runtime.model.RemoteObject>
86+
maybeException = details.getException();
8587

86-
JavascriptException exception = new JavascriptException(event.getExceptionDetails().getText());
88+
String message = maybeException
89+
.flatMap(obj -> obj.getDescription().map(String::toString))
90+
.orElseGet(details::getText);
91+
92+
JavascriptException exception = new JavascriptException(message);
8793

8894
if (!maybeTrace.isPresent()) {
8995
StackTraceElement element = new StackTraceElement(

java/client/src/org/openqa/selenium/devtools/v88/V88Events.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,14 @@ protected ConsoleEvent toConsoleEvent(ConsoleAPICalled event) {
8282
protected JavascriptException toJsException(ExceptionThrown event) {
8383
ExceptionDetails details = event.getExceptionDetails();
8484
Optional<StackTrace> maybeTrace = details.getStackTrace();
85+
Optional<org.openqa.selenium.devtools.v88.runtime.model.RemoteObject>
86+
maybeException = details.getException();
8587

86-
JavascriptException exception = new JavascriptException(event.getExceptionDetails().getText());
88+
String message = maybeException
89+
.flatMap(obj -> obj.getDescription().map(String::toString))
90+
.orElseGet(details::getText);
91+
92+
JavascriptException exception = new JavascriptException(message);
8793

8894
if (!maybeTrace.isPresent()) {
8995
StackTraceElement element = new StackTraceElement(

java/client/src/org/openqa/selenium/devtools/v89/V89Events.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,14 @@ protected ConsoleEvent toConsoleEvent(ConsoleAPICalled event) {
8282
protected JavascriptException toJsException(ExceptionThrown event) {
8383
ExceptionDetails details = event.getExceptionDetails();
8484
Optional<StackTrace> maybeTrace = details.getStackTrace();
85+
Optional<org.openqa.selenium.devtools.v89.runtime.model.RemoteObject>
86+
maybeException = details.getException();
8587

86-
JavascriptException exception = new JavascriptException(event.getExceptionDetails().getText());
88+
String message = maybeException
89+
.flatMap(obj -> obj.getDescription().map(String::toString))
90+
.orElseGet(details::getText);
91+
92+
JavascriptException exception = new JavascriptException(message);
8793

8894
if (!maybeTrace.isPresent()) {
8995
StackTraceElement element = new StackTraceElement(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Licensed to the Software Freedom Conservancy (SFC) under one
2+
// or more contributor license agreements. See the NOTICE file
3+
// distributed with this work for additional information
4+
// regarding copyright ownership. The SFC licenses this file
5+
// to you under the Apache License, Version 2.0 (the
6+
// "License"); you may not use this file except in compliance
7+
// with the License. You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing,
12+
// software distributed under the License is distributed on an
13+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
// KIND, either express or implied. See the License for the
15+
// specific language governing permissions and limitations
16+
// under the License.
17+
18+
package org.openqa.selenium.devtools;
19+
20+
import static org.assertj.core.api.Assertions.assertThat;
21+
22+
import org.junit.Test;
23+
import org.openqa.selenium.By;
24+
import org.openqa.selenium.JavascriptException;
25+
import org.openqa.selenium.environment.webserver.Page;
26+
27+
import java.util.concurrent.CompletableFuture;
28+
import java.util.concurrent.ExecutionException;
29+
import java.util.concurrent.TimeUnit;
30+
import java.util.concurrent.TimeoutException;
31+
32+
public class JavascriptExceptionsTest extends DevToolsTestBase {
33+
34+
@Test
35+
public void canWatchJavascriptExceptions() throws InterruptedException, ExecutionException, TimeoutException {
36+
String page = appServer.create(
37+
new Page()
38+
.withBody("<div id='button' onclick='helloWorld()'>click me</div>")
39+
.withScripts("function helloWorld() { throw new Error('Hello, world!') }"));
40+
driver.get(page);
41+
42+
CompletableFuture<JavascriptException> future = new CompletableFuture<>();
43+
devTools.getDomains().events().addJavascriptExceptionListener(future::complete);
44+
driver.findElement(By.id("button")).click();
45+
JavascriptException exception = future.get(5, TimeUnit.SECONDS);
46+
47+
assertThat(exception.getRawMessage()).startsWith("Error: Hello, world!\n");
48+
}
49+
50+
}

0 commit comments

Comments
 (0)