Flutter自动化测试插件webdriver的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter自动化测试插件webdriver的使用

webdriver.dart 是一个为Dart提供WebDriver绑定的包,支持通过JSON接口与WebDriver远程服务器交互。下面将介绍如何在Flutter项目中使用这个包进行自动化测试。

安装 webdriver

首先,在你的pubspec.yaml文件中添加对webdriver包的依赖:

dependencies:
  webdriver: ^0.14.0 # 确保版本号是最新的

然后运行flutter pub get来安装依赖。

使用 webdriver

异步模式

你可以使用异步方式来创建WebDriver实例:

import 'package:webdriver/io.dart';

void main() async {
  var driver = await createDriver(
    uri: Uri.parse('http://localhost:4444/wd/hub'),
    desiredCapabilities: Capabilities.chrome,
  );

  // 进行测试操作...
  
  await driver.quit();
}

同步模式

或者选择同步模式(支持JSON wire spec和W3C spec):

import 'package:webdriver/sync_io.dart';

void main() {
  final driver = createDriver(
    uri: Uri.parse('http://localhost:4444/wd/hub'),
    desiredCapabilities: Capabilities.firefox,
    spec: WebDriverSpec.W3c, // 或者使用 WebDriverSpec.Auto 自动推断
  );

  // 执行测试操作...

  driver.quit();
}

测试步骤

1. 启动WebDriver二进制文件

你需要先启动ChromeDriver或GeckoDriver(用于Firefox)。例如,可以通过命令行启动:

  • ChromeDriver:
chromedriver --port=4444 --url-base=wd/hub --verbose
  • GeckoDriver:
geckodriver --port=4445

2. 编写并运行测试脚本

编写一个以 _test.dart 结尾的测试文件,并执行如下命令运行测试:

dart test path/to/your_test_file.dart -r expanded -p vm

如果你想运行所有测试文件,可以简单地使用:

dart test -r expanded -p vm

这是一个简单的示例测试脚本:

import 'package:test/test.dart';
import 'package:webdriver/io.dart';

void main() {
  group('webdriver example', () {
    late WebDriver driver;

    setUpAll(() async {
      driver = await createDriver(
        uri: Uri.parse('http://localhost:4444/wd/hub'),
        desiredCapabilities: Capabilities.chrome,
      );
    });

    tearDownAll(() async {
      await driver.quit();
    });

    test('should load google homepage', () async {
      await driver.get('https://www.google.com');
      expect(await driver.title, 'Google');
    });
  });
}

更多关于Flutter自动化测试插件webdriver的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自动化测试插件webdriver的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中,使用WebDriver进行自动化测试通常是通过集成Appium或Flutter Driver来实现的。由于Flutter本身并不直接支持WebDriver协议,我们通常借助Flutter Driver和Dart语言编写的测试脚本来实现自动化测试。不过,如果你希望在移动设备上使用类似于WebDriver的功能,Appium是一个很好的选择,因为它支持WebDriver协议并可以测试原生和混合应用(包括Flutter应用)。

以下是如何在Flutter项目中设置和使用Flutter Driver进行自动化测试的代码案例,以及如何通过Appium来间接使用WebDriver协议。

使用Flutter Driver进行自动化测试

  1. 添加依赖

    在你的pubspec.yaml文件中添加Flutter Driver依赖:

    dependencies:
      flutter:
        sdk: flutter
      flutter_test:
        sdk: flutter
      flutter_driver:
        sdk: flutter
    
  2. 编写测试脚本

    创建一个新的测试文件,例如test_driver/app_test.dart

    import 'package:flutter_driver/flutter_driver.dart';
    import 'package:test/test.dart';
    
    void main() {
      group('Counter App Tests', () {
        FlutterDriver driver;
    
        // Connect to the Flutter driver before each test.
        setUpAll(() async {
          driver = await FlutterDriver.connect();
        });
    
        // Disconnect from the driver after the tests are done.
        tearDownAll(() async {
          if (driver != null) {
            driver?.quit();
          }
        });
    
        test('taps on the floating action button', () async {
          // Find the floating action button by its tooltip text.
          final buttonFinder = await driver.findElement(
            byValueKey('increment'),
          );
    
          // Tap on the button.
          await buttonFinder.tap();
    
          // Wait a moment to ensure the animation completes.
          await Future.delayed(Duration(seconds: 1));
    
          // Verify that the counter value has incremented.
          final counterFinder = await driver.findElement(
            byValueKey('counter'),
          );
    
          final counterText = await counterFinder.text();
    
          expect(int.parse(counterText), equals(1));
        });
      });
    }
    
  3. 运行测试

    使用以下命令运行测试:

    flutter drive --target=test_driver/app_test.dart
    

使用Appium进行自动化测试(间接支持WebDriver)

  1. 安装Appium

    按照Appium的官方文档进行安装。

  2. 配置Appium

    启动Appium服务器,并创建一个新的会话,指定你的Flutter应用的.apk.ipa文件路径。

  3. 编写WebDriver测试脚本

    使用你喜欢的WebDriver客户端库(如Java的Selenium WebDriver,Python的Appium-Python-Client等)编写测试脚本。

    以下是一个使用Python和Appium-Python-Client的示例:

    from appium import webdriver
    import time
    
    # Desired Capabilities for Flutter App
    desired_caps = {
        "platformName": "Android",  # or "iOS"
        "deviceName": "Your Device Name",
        "app": "path/to/your/flutter/app.apk",  # or .ipa for iOS
        "appPackage": "com.yourapp.package",  # Android only
        "appActivity": ".MainActivity",  # Android only
        "automationName": "UiAutomator2",  # or "XCUITest" for iOS
        "newCommandTimeout": 300
    }
    
    # Initialize the WebDriver session
    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    
    # Locate and interact with elements
    # Note: You'll need to find the actual element locators (e.g., resource-id, accessibility-id)
    # These can be found using Appium Inspector or other tools
    increment_button = driver.find_element_by_accessibility_id("increment")
    counter_text = driver.find_element_by_accessibility_id("counter")
    
    # Tap on the increment button
    increment_button.click()
    
    # Wait for the UI to update
    time.sleep(1)
    
    # Get the counter text and verify
    counter_value = counter_text.text
    assert int(counter_value) == 1, f"Expected counter to be 1, but got {counter_value}"
    
    # Close the session
    driver.quit()
    

请注意,使用Appium测试Flutter应用时,元素定位可能需要一些额外的努力,因为Flutter渲染的UI与原生UI有所不同。你可能需要使用Appium Inspector或其他工具来检查并确定正确的元素定位策略。

希望这些代码案例能帮助你开始使用Flutter自动化测试。如果有进一步的问题,请随时提问!

回到顶部