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', () {