Enable log retrieval for W3C with a catch on UnknownCommandException in case it's not supported.
PiperOrigin-RevId: 252711952
diff --git a/lib/src/async/logs.dart b/lib/src/async/logs.dart
index 58fa3ca..3611d14 100644
--- a/lib/src/async/logs.dart
+++ b/lib/src/async/logs.dart
@@ -14,6 +14,7 @@
import 'dart:async';
+import 'package:webdriver/src/common/exception.dart';
import 'package:webdriver/src/common/log.dart';
import 'package:webdriver/src/common/request_client.dart';
import 'package:webdriver/src/common/webdriver_handler.dart';
@@ -32,8 +33,8 @@
for (var entry in entries) {
yield entry;
}
- } on UnsupportedError {
- // Produces no entries for W3C/Firefox.
+ } on UnknownCommandException {
+ // Produces no entries for Firefox.
}
}
diff --git a/lib/src/handler/w3c_handler.dart b/lib/src/handler/w3c_handler.dart
index 932a2b0..913a778 100644
--- a/lib/src/handler/w3c_handler.dart
+++ b/lib/src/handler/w3c_handler.dart
@@ -1,5 +1,6 @@
import 'dart:convert';
+import 'package:webdriver/src/common/log.dart';
import 'package:webdriver/src/common/request.dart';
import 'package:webdriver/src/common/webdriver_handler.dart';
import 'package:webdriver/src/handler/w3c/alert.dart';
@@ -54,8 +55,7 @@
TimeoutsHandler timeouts = W3cTimeoutsHandler();
@override
- LogsHandler get logs =>
- throw UnsupportedError('Unsupported for W3cWebDriverHandler');
+ LogsHandler get logs => W3cLogsHandler();
@override
WebDriverRequest buildGeneralRequest(HttpMethod method, String uri,
@@ -71,3 +71,15 @@
@override
String toString() => 'W3C';
}
+
+class W3cLogsHandler extends LogsHandler {
+ @override
+ WebDriverRequest buildGetLogsRequest(String logType) =>
+ WebDriverRequest.postRequest('log', {'type': logType});
+
+ @override
+ List<LogEntry> parseGetLogsResponse(WebDriverResponse response) =>
+ parseW3cResponse(response)
+ .map<LogEntry>((e) => LogEntry.fromMap(e))
+ .toList();
+}
diff --git a/lib/src/sync/logs.dart b/lib/src/sync/logs.dart
index 59962ae..4a51473 100644
--- a/lib/src/sync/logs.dart
+++ b/lib/src/sync/logs.dart
@@ -12,6 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+import 'package:webdriver/src/common/exception.dart';
import 'package:webdriver/src/common/log.dart';
import 'package:webdriver/src/common/request_client.dart';
import 'package:webdriver/src/common/webdriver_handler.dart';
@@ -26,8 +27,8 @@
try {
return _client.send(_handler.logs.buildGetLogsRequest(logType),
_handler.logs.parseGetLogsResponse);
- } on UnsupportedError {
- // Produces no entries for W3C/Firefox.
+ } on UnknownCommandException {
+ // Produces no entries for Firefox.
return <LogEntry>[];
}
}
diff --git a/test/async_logs_test.dart b/test/async_logs_test.dart
index bf38610..c885891 100644
--- a/test/async_logs_test.dart
+++ b/test/async_logs_test.dart
@@ -44,7 +44,12 @@
test('get logs', () async {
List<LogEntry> logs = await driver.logs.get(LogType.performance).toList();
- expect(logs.length, greaterThan(0));
+ if (driver.capabilities['browserName'] == 'firefox') {
+ expect(logs, isEmpty);
+ return;
+ }
+
+ expect(logs, isNotEmpty);
logs.forEach((entry) {
expect(entry.level, equals(LogLevel.info));
});
diff --git a/test/sync/logs.dart b/test/sync/logs.dart
index 4689d52..fd30fb9 100644
--- a/test/sync/logs.dart
+++ b/test/sync/logs.dart
@@ -44,7 +44,12 @@
test('get logs', () {
List<LogEntry> logs = driver.logs.get(LogType.performance).toList();
- expect(logs.length, greaterThan(0));
+ if (driver.capabilities['browserName'] == 'firefox') {
+ expect(logs, isEmpty);
+ return;
+ }
+
+ expect(logs, isNotEmpty);
logs.forEach((entry) {
expect(entry.level, equals(LogLevel.info));
});