Skip to content
This repository has been archived by the owner on Feb 22, 2023. It is now read-only.

[web] adding a test for e2e web testing. #2554

Merged
merged 17 commits into from
Feb 28, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .cirrus.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ task:
dockerfile: .ci/Dockerfile
cpu: 8
memory: 16G
env:
E2E_PATH: "./packages/e2e"
upgrade_script:
- flutter channel stable
- flutter upgrade
Expand Down Expand Up @@ -45,6 +47,19 @@ task:
- if [[ "$CHANNEL" -eq "stable" ]]; then find . | grep _web$ | xargs rm -rf; fi
- flutter channel $CHANNEL
- ./script/build_all_plugins_app.sh apk
- name: e2e_web_smoke_test
# Tests e2e example test in web.
only_if: "changesInclude('.cirrus.yml', 'packages/e2e/**') || $CIRRUS_PR == ''"
install_script:
- flutter config --enable-web
- git clone https://github.com/flutter/web_installers.git
- cd web_installers/packages/web_drivers/
- pub get
- dart lib/web_driver_installer.dart chromedriver --install-only
- ./chromedriver/chromedriver --port=4444 &
test_script:
- cd $E2E_PATH/example/
- flutter drive -v --target=test_driver/example_e2e.dart -d web-server --release --browser-name=chrome
- name: build-apks+java-test+firebase-test-lab
env:
matrix:
Expand Down
4 changes: 4 additions & 0 deletions packages/e2e/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.2.4+4

* Fixed a hang that occurred on platforms that don't have a `MethodChannel` listener registered..
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* Fixed a hang that occurred on platforms that don't have a `MethodChannel` listener registered..
* Fixed a hang that occurred on platforms that don't have a `MethodChannel` listener registered.


## 0.2.4+3

* Fixed code snippet in the readme under the "Using Flutter driver to run tests" section.
Expand Down
9 changes: 9 additions & 0 deletions packages/e2e/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,15 @@ cd example
flutter drive --driver=test_driver/<package_name>_test.dart test/<package_name>_e2e.dart
```

You can run tests on web on release mode.

First you need to make sure you have downloaded the driver for the browser.

```
cd example
flutter drive -v --target=test_driver/<package_name>dart -d web-server --release --browser-name=chrome
```

## Android device testing

Create an instrumentation test file in your application's
Expand Down
26 changes: 2 additions & 24 deletions packages/e2e/example/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,27 +1,5 @@
import 'dart:io' show Platform;
import 'package:flutter/material.dart';
import 'my_app.dart' if (dart.library.html) 'my_web_app.dart';

// ignore_for_file: public_member_api_docs

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Text('Platform: ${Platform.operatingSystem}\n'),
),
),
);
}
}
void main() => startApp();
27 changes: 27 additions & 0 deletions packages/e2e/example/lib/my_app.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import 'dart:io' show Platform;
import 'package:flutter/material.dart';

// ignore_for_file: public_member_api_docs

void startApp() => runApp(MyApp());

class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Text('Platform: ${Platform.operatingSystem}\n'),
),
),
);
}
}
28 changes: 28 additions & 0 deletions packages/e2e/example/lib/my_web_app.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import 'dart:html' as html;
import 'package:flutter/material.dart';

// ignore_for_file: public_member_api_docs

void startApp() => runApp(MyWebApp());

class MyWebApp extends StatefulWidget {
@override
_MyWebAppState createState() => _MyWebAppState();
}

class _MyWebAppState extends State<MyWebApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
key: Key('mainapp'),
child: Text('Platform: ${html.window.navigator.platform}\n'),
),
),
);
}
}
21 changes: 3 additions & 18 deletions packages/e2e/example/test_driver/example_e2e.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,12 @@
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.

import 'dart:io' show Platform;
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:e2e/e2e.dart';

import 'package:e2e_example/main.dart';
import 'example_e2e_io.dart' if (dart.library.html) 'example_e2e_web.dart'
as tests;

void main() {
E2EWidgetsFlutterBinding.ensureInitialized();
testWidgets('verify text', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(MyApp());

// Verify that platform version is retrieved.
expect(
find.byWidgetPredicate(
(Widget widget) =>
widget is Text &&
widget.data.startsWith('Platform: ${Platform.operatingSystem}'),
),
findsOneWidget,
);
});
tests.main();
}
34 changes: 34 additions & 0 deletions packages/e2e/example/test_driver/example_e2e_io.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility that Flutter provides. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.

import 'dart:io' show Platform;
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:e2e/e2e.dart';

import 'package:e2e_example/main.dart' as app;

void main() {
E2EWidgetsFlutterBinding.ensureInitialized();
testWidgets('verify text', (WidgetTester tester) async {
// Build our app and trigger a frame.
app.main();

// Trigger a frame.
await tester.pumpAndSettle();

// Verify that platform version is retrieved.
expect(
find.byWidgetPredicate(
(Widget widget) =>
widget is Text &&
widget.data.startsWith('Platform: ${Platform.operatingSystem}'),
),
findsOneWidget,
);
});
}
35 changes: 35 additions & 0 deletions packages/e2e/example/test_driver/example_e2e_web.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility that Flutter provides. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.

import 'dart:html' as html;
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:e2e/e2e.dart';

import 'package:e2e_example/main.dart' as app;

void main() {
E2EWidgetsFlutterBinding.ensureInitialized();
testWidgets('verify text', (WidgetTester tester) async {
// Build our app and trigger a frame.
app.main();

// Trigger a frame.
await tester.pumpAndSettle();

// Verify that platform is retrieved.
expect(
find.byWidgetPredicate(
(Widget widget) =>
widget is Text &&
widget.data
.startsWith('Platform: ${html.window.navigator.platform}\n'),
),
findsOneWidget,
);
});
}
6 changes: 3 additions & 3 deletions packages/e2e/example/test_driver/failure.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:e2e/e2e.dart';

import 'package:e2e_example/main.dart';
import 'package:e2e_example/main.dart' as app;

// Tests the failure behavior of the E2EWidgetsFlutterBinding
//
Expand All @@ -21,10 +21,10 @@ void main() {

testWidgets('failure 1', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(MyApp());
app.main();

// Verify that platform version is retrieved.
expect(
await expectLater(
find.byWidgetPredicate(
(Widget widget) =>
widget is Text && widget.data.startsWith('This should fail'),
Expand Down
Binary file added packages/e2e/example/web/favicon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added packages/e2e/example/web/icons/Icon-192.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added packages/e2e/example/web/icons/Icon-512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
33 changes: 33 additions & 0 deletions packages/e2e/example/web/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
<meta name="description" content="A new Flutter project.">

<!-- iOS meta tags & icons -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="example">
<link rel="apple-touch-icon" href="/icons/Icon-192.png">

<!-- Favicon -->
<link rel="shortcut icon" type="image/png" href="/favicon.png"/>

<title>example</title>
<link rel="manifest" href="/manifest.json">
</head>
<body>
<!-- This script installs service_worker.js to provide PWA functionality to
application. For more information, see:
https://developers.google.com/web/fundamentals/primers/service-workers -->
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', function () {
navigator.serviceWorker.register('/flutter_service_worker.js');
});
}
</script>
<script src="main.dart.js" type="application/javascript"></script>
</body>
</html>
23 changes: 23 additions & 0 deletions packages/e2e/example/web/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"name": "example",
"short_name": "example",
"start_url": ".",
"display": "minimal-ui",
"background_color": "#0175C2",
"theme_color": "#0175C2",
"description": "A new Flutter project.",
"orientation": "portrait-primary",
"prefer_related_applications": false,
"icons": [
{
"src": "icons/Icon-192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "icons/Icon-512.png",
"sizes": "512x512",
"type": "image/png"
}
]
}
6 changes: 6 additions & 0 deletions packages/e2e/lib/e2e.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ class E2EWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding {
// TODO(jackson): Report test results as they arrive
tearDownAll(() async {
try {
// For web integration tests we are not using the
collinjackson marked this conversation as resolved.
Show resolved Hide resolved
// `plugins.flutter.io/e2e`. Mark the tests as complete before invoking
// the channel.
if (kIsWeb) {
if (!_allTestsPassed.isCompleted) _allTestsPassed.complete(true);
}
await _channel.invokeMethod<void>(
'allTestsFinished', <String, dynamic>{'results': _results});
} on MissingPluginException {
Expand Down
2 changes: 1 addition & 1 deletion packages/e2e/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: e2e
description: Runs tests that use the flutter_test API as integration tests.
version: 0.2.4+3
version: 0.2.4+4
homepage: https://github.com/flutter/plugins/tree/master/packages/e2e

environment:
Expand Down