FlutterDriver: deprecate enableAccessibility; redirect it to setSemantics; add setSemantics tests (#82939)
* deprecate enableAccessibility; redirect it to setSemantics
Co-authored-by: David Iglesias <ditman@gmail.com>
diff --git a/examples/hello_world/test_driver/smoke_web_engine_test.dart b/examples/hello_world/test_driver/smoke_web_engine_test.dart
index 2ca900c..875c3fb 100644
--- a/examples/hello_world/test_driver/smoke_web_engine_test.dart
+++ b/examples/hello_world/test_driver/smoke_web_engine_test.dart
@@ -31,7 +31,7 @@
});
test('enable accessibility', () async {
- await driver.enableAccessibility();
+ await driver.setSemantics(true);
await Future<void>.delayed(const Duration(seconds: 2));
diff --git a/packages/flutter_driver/lib/src/driver/driver.dart b/packages/flutter_driver/lib/src/driver/driver.dart
index 063137d..95763da 100644
--- a/packages/flutter_driver/lib/src/driver/driver.dart
+++ b/packages/flutter_driver/lib/src/driver/driver.dart
@@ -174,8 +174,12 @@
async_io.WebDriver get webDriver => throw UnimplementedError();
/// Enables accessibility feature.
+ @Deprecated(
+ 'Call setSemantics(true) instead. '
+ 'This feature was deprecated after v2.3.0-12.1.pre.'
+ )
Future<void> enableAccessibility() async {
- throw UnimplementedError();
+ await setSemantics(true);
}
/// Sends [command] to the Flutter Driver extensions.
@@ -522,6 +526,13 @@
///
/// Returns true when the call actually changed the state from on to off or
/// vice versa.
+ ///
+ /// Does not enable or disable the assistive technology installed on the
+ /// device. For example, this does not enable VoiceOver on iOS, TalkBack on
+ /// Android, or NVDA on Windows.
+ ///
+ /// Enabling semantics on the web causes the engine to render ARIA-annotated
+ /// HTML.
Future<bool> setSemantics(bool enabled, { Duration? timeout }) async {
final SetSemanticsResult result = SetSemanticsResult.fromJson(await sendCommand(SetSemantics(enabled, timeout: timeout)));
return result.changedState;
diff --git a/packages/flutter_driver/lib/src/driver/vmservice_driver.dart b/packages/flutter_driver/lib/src/driver/vmservice_driver.dart
index eb31919..32e3196 100644
--- a/packages/flutter_driver/lib/src/driver/vmservice_driver.dart
+++ b/packages/flutter_driver/lib/src/driver/vmservice_driver.dart
@@ -287,10 +287,6 @@
/// Whether to log communication between host and app to `flutter_driver_commands.log`.
final bool _logCommunicationToFile;
- @override
- Future<void> enableAccessibility() async {
- throw UnsupportedError('VMServiceFlutterDriver does not support enableAccessibility');
- }
@override
Future<Map<String, dynamic>> sendCommand(Command command) async {
diff --git a/packages/flutter_driver/lib/src/driver/web_driver.dart b/packages/flutter_driver/lib/src/driver/web_driver.dart
index f338286..e5229e0 100644
--- a/packages/flutter_driver/lib/src/driver/web_driver.dart
+++ b/packages/flutter_driver/lib/src/driver/web_driver.dart
@@ -39,7 +39,6 @@
final FlutterWebConnection _connection;
DateTime _startTime;
- bool _accessibilityEnabled = false;
static int _nextDriverId = 0;
/// The unique ID of this driver instance.
@@ -97,22 +96,6 @@
}
@override
- Future<void> enableAccessibility() async {
- if (!_accessibilityEnabled) {
- // Clicks the button to enable accessibility via Javascript for Desktop Web.
- //
- // The tag used in the script is based on
- // https://github.com/flutter/engine/blob/master/lib/web_ui/lib/src/engine/semantics/semantics_helper.dart#L193
- //
- // TODO(angjieli): Support Mobile Web. (https://github.com/flutter/flutter/issues/65192)
- await webDriver.execute(
- "document.querySelector('flt-semantics-placeholder').click();",
- <String>[]);
- _accessibilityEnabled = true;
- }
- }
-
- @override
Future<Map<String, dynamic>> sendCommand(Command command) async {
Map<String, dynamic> response;
final Map<String, String> serialized = command.serialize();
diff --git a/packages/flutter_driver/test/src/real_tests/flutter_driver_test.dart b/packages/flutter_driver/test/src/real_tests/flutter_driver_test.dart
index b3928e0..12a557d 100644
--- a/packages/flutter_driver/test/src/real_tests/flutter_driver_test.dart
+++ b/packages/flutter_driver/test/src/real_tests/flutter_driver_test.dart
@@ -630,15 +630,31 @@
});
});
- group('VMServiceFlutterDriver Unsupported error', () {
- test('enableAccessibility', () async {
- expect(driver.enableAccessibility(), throwsUnsupportedError);
+ group('setSemantics', () {
+ test('can be enabled', () async {
+ fakeClient.responses['set_semantics'] = makeFakeResponse(<String, Object>{
+ 'changedState': true,
+ });
+ await driver.setSemantics(true, timeout: _kTestTimeout);
+ expect(fakeClient.commandLog, <String>[
+ 'ext.flutter.driver {command: set_semantics, timeout: $_kSerializedTestTimeout, enabled: true}',
+ ]);
});
- test('webDriver', () async {
- expect(() => driver.webDriver, throwsUnsupportedError);
+ test('can be disabled', () async {
+ fakeClient.responses['set_semantics'] = makeFakeResponse(<String, Object>{
+ 'changedState': false,
+ });
+ await driver.setSemantics(false, timeout: _kTestTimeout);
+ expect(fakeClient.commandLog, <String>[
+ 'ext.flutter.driver {command: set_semantics, timeout: $_kSerializedTestTimeout, enabled: false}',
+ ]);
});
});
+
+ test('VMServiceFlutterDriver does not support webDriver', () async {
+ expect(() => driver.webDriver, throwsUnsupportedError);
+ });
});
group('VMServiceFlutterDriver with custom timeout', () {