Программное моделирование взаимодействия с пользователем для модульного тестирования в Google Dart

Я пытаюсь написать модульное тестирование для довольно сложного меню, и я хотел бы имитировать взаимодействие пользователя с этим меню.

Я обнаружил, что можно имитировать щелчок с помощью querySelector("#myElement").click(), но я хотел бы иметь возможность запускать более сложные события, такие как mouseDown в определенном месте document, mouseMove, touchStart и touchEnd и т. д.


person Daniel    schedule 24.04.2014    source источник


Ответы (1)


Я нашел способ сделать это. Он все еще не завершен и не идеален, но дает то, что мне нужно.

import 'dart:html';
import 'dart:async';


void main() {

  // Create the target element.
  DivElement menuSprite = new DivElement()
    ..style.height = "50px"
    ..style.width = "50px"
    ..style.border = "1px solid black";
  document.body.children.add(menuSprite);

  // Asign event listeners.
  menuSprite
    ..onMouseDown.listen((e) => menuSprite.style.backgroundColor = "red")
    ..onMouseUp.listen((e) => menuSprite.style.backgroundColor = "blue")
    ..onTouchStart.listen((e) => menuSprite.style.backgroundColor = "orange")
    ..onTouchEnd.listen((e) => menuSprite.style.backgroundColor = "brown");

  // Create the events.
  // TODO: Events have more parameters or be more specific.
  // See:
  //  * https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart-dom-html.MouseEvent
  //  * https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart-dom-html.TouchEvent
  //
  // CAUTION: event type is case sensitive ('mouseDown' desn't work).
  Event myMouseDown = new Event('mousedown');
  Event myMouseUp = new Event('mouseup');
  Event myTouchStart = new Event('touchstart');
  Event myTouchEnd = new Event('touchend');
  // TODO: mouseMove and touchMove events.

  // We can fire the events using "Element.dispatchEvent()".
  new Future.delayed(new Duration(milliseconds: 500), () =>
      menuSprite.dispatchEvent(myMouseDown));
  new Future.delayed(new Duration(milliseconds: 1000), () =>
      menuSprite.dispatchEvent(myMouseUp));
  new Future.delayed(new Duration(milliseconds: 1500), () =>
      menuSprite.dispatchEvent(myTouchStart));
  new Future.delayed(new Duration(milliseconds: 2000), () =>
      menuSprite.dispatchEvent(myTouchEnd));
}

Идея взята из: Async и тестирование пользовательского ввода в Dart

person Daniel    schedule 24.04.2014