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 2ca900c064..875c3fb667 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 @@ void main() { }); test('enable accessibility', () async { - await driver.enableAccessibility(); + await driver.setSemantics(true); await Future.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 063137da45..95763da162 100644 --- a/packages/flutter_driver/lib/src/driver/driver.dart +++ b/packages/flutter_driver/lib/src/driver/driver.dart @@ -174,8 +174,12 @@ abstract class FlutterDriver { 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 enableAccessibility() async { - throw UnimplementedError(); + await setSemantics(true); } /// Sends [command] to the Flutter Driver extensions. @@ -522,6 +526,13 @@ abstract class FlutterDriver { /// /// 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 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 eb31919902..32e3196709 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 @@ class VMServiceFlutterDriver extends FlutterDriver { /// Whether to log communication between host and app to `flutter_driver_commands.log`. final bool _logCommunicationToFile; - @override - Future enableAccessibility() async { - throw UnsupportedError('VMServiceFlutterDriver does not support enableAccessibility'); - } @override Future> 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 f3382868bd..e5229e0905 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 @@ class WebFlutterDriver extends FlutterDriver { final FlutterWebConnection _connection; DateTime _startTime; - bool _accessibilityEnabled = false; static int _nextDriverId = 0; /// The unique ID of this driver instance. @@ -96,22 +95,6 @@ class WebFlutterDriver extends FlutterDriver { ); } - @override - Future 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();", - []); - _accessibilityEnabled = true; - } - } - @override Future> sendCommand(Command command) async { Map response; 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 b3928e0896..12a557d537 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 @@ void main() { }); }); - group('VMServiceFlutterDriver Unsupported error', () { - test('enableAccessibility', () async { - expect(driver.enableAccessibility(), throwsUnsupportedError); + group('setSemantics', () { + test('can be enabled', () async { + fakeClient.responses['set_semantics'] = makeFakeResponse({ + 'changedState': true, + }); + await driver.setSemantics(true, timeout: _kTestTimeout); + expect(fakeClient.commandLog, [ + '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({ + 'changedState': false, + }); + await driver.setSemantics(false, timeout: _kTestTimeout); + expect(fakeClient.commandLog, [ + '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', () {