Flutter is a UI development framework, open-sourced by Google. It allows you to make cross-platform mobile apps. Write code once and build the app for both Android and iOS.
It is similar to React Native, which is a framework built by Facebook.
Flutter apps are written in Dart. The app runs inside a Dart virtual machine, which supports hot reloading. This makes it easy to make on-the-fly reloading while developing your app.
At the core of Flutter is the Flutter engine, which is written in C++. It is responsible for UI, networking, compiling and other core features.
Flutter uses a reactive UI framework, similar to Facebook's React framework.
First, make sure you have installed Appium. You can easily do this through NPM (which comes with NodeJS):
npm install appium
You will also need to install appium flutter-driver which allows you to use Appium in combination with Flutter apps.
npm install appium-flutter-driver
Next, make sure your app is configured to run automated tests.
You'll need to compile your Flutter app in either debug or profile mode and use the enableFlutterDriverExtension before runApp
.
void main() {
enableFlutterDriverExtension();
init();
runApp(MyApp());
}
Once this is done, you can create and run your first automated test. Please see the example below on how to run a simple automated test on a flutter-based mobile app, both on Android and iOS.
const wdio = require('webdriverio');
const assert = require('assert');
const { byValueKey } = require('appium-flutter-finder');
const caps = {
platformName: 'Android',
deviceName: 'Samsung Galaxy S21',
app: 'http://...path.to.apk',
};
const opts = {
capabilities: {
...caps,
automationName: 'Flutter',
retryBackoffTime: 500,
hostname: 'hub.testingbot.com',
user: '...',
key: '...'
}
};
(async () => {
const counterTextFinder = byValueKey('counter');
const buttonFinder = byValueKey('increment');
const driver = await wdio.remote(opts);
if (process.env.APPIUM_OS === 'android') {
await driver.switchContext('NATIVE_APP');
await (await driver.$('~fab')).click();
await driver.switchContext('FLUTTER');
} else {
console.log('Switching context to `NATIVE_APP` is currently only applicable to Android demo app.')
}
assert.strictEqual(await driver.getElementText(counterTextFinder), '0');
await driver.elementClick(buttonFinder);
await driver.touchAction({
action: 'tap',
element: { elementId: buttonFinder }
});
assert.strictEqual(await driver.getElementText(counterTextFinder), '2');
driver.deleteSession();
})();
An advantage of using a cloud-based provider for Appium testing, is that they provide ready-to-use devices, preconfigured to run your tests. It saves you from having to purchase, set up and maintain a pool of devices yourself.
More information on Appium Flutter app Testing is available on TestingBot, which provides a cloud-based grid consisting of multiple physical iOS and Android devices, ready to run your automated mobile app tests.
Also Published Here