如何使用Dart进行自动浏览器测试?

时间:2017-02-13 18:45:59

标签: dart


飞镖有没有无头浏览器吗?或者像硒这样的包装?我的目标是使用浏览器对我多年前写过的网站进行自动化最终用户测试。现在我需要对网站进行一些更改。由于它包含特定的业务逻辑,我想在进行这些更改之前为网站编写一些快速测试,而无需重构或修改它以进行单元测试。
对于更熟悉飞镖生态系统来说,这似乎是一个有趣的介绍。

提前谢谢!

3 个答案:

答案 0 :(得分:7)

您可以使用Chrome或Dartium并使用ChromeDriverwebdriver package

进行推送

这是一个简单的例子:

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

main() async {
  // Start the ChromeDriver process
  Process chromeDriverProcess = await Process
      .start('chromedriver', ['--port=4444', '--url-base=wd/hub']);

  await for (String browserOut in const LineSplitter()
      .bind(UTF8.decoder.bind(chromeDriverProcess.stdout))) {
    if (browserOut.contains('Starting ChromeDriver')) {
      break;
    }
  }

  // Connect to it with the webdriver package
  WebDriver driver = await createDriver(
      uri: Uri.parse('http://localhost:4444/wd/hub/'),
      desired: Capabilities.chrome);

  // Go to your page
  await driver.get('http://stackoverflow.com');

  //TODO: write your tests
  print(await driver.execute('return navigator.userAgent', []));

  // Take a simple screenshot
  String screenshot = await driver.captureScreenshotAsBase64();
  new File('stackoverflow.png').writeAsBytesSync(BASE64.decode(screenshot));

  driver.quit();
  chromeDriverProcess.kill();
}

这不是完全无头的#34;但是使用此配置很容易使它在像Travis-CI这样的服务器上运行:

before_install:
 - export DISPLAY=:99.0
 - sh -e /etc/init.d/xvfb start

答案 1 :(得分:2)

content-shell是Dartium支持Dartium的无头浏览器 (https://www.dartlang.org/install/mac

https://pub.dartlang.org/packages/webdriver可用于Selenium测试。

对Chromium正在进行的工作有无头的支持。当Dartium升级为使用这个Chromium版本时,Dartium应该可以无头跑。

Dart团队正致力于增量JS编译(DDC - Dart开发编译器),它应该允许使用Chrome作为开发浏览器。无头模式(如果可用)可以直接使用。

答案 2 :(得分:1)

根据您的用例和要求,您或许还可以使用 puppeteer

例如(来自文档),您可以截取页面的屏幕截图

void main() async {
  // Start the browser and go to a web page
  var browser = await puppeteer.launch();
  var page = await browser.newPage();

  // Setup the dimensions and user-agent of a particular phone
  await page.emulate(puppeteer.devices.pixel2XL);

  await page.goto('https://dart.dev', wait: Until.networkIdle);

  // Take a screenshot of the page
  var screenshot = await page.screenshot();

  // Save it to a file
  await File('example/_github.png').writeAsBytes(screenshot);

  await browser.close();
}

您还可以生成 PDF、截取节点的屏幕截图、与页面交互、评估 JavaScript 以及使用 Dart 代码的结果等等。