anchor.diff:    @override
     _HtmlMouse get mouse => _mouse;
   
  -  HtmlPageLoader(Node globalContext,
  -      {bool useShadowDom: true,
  +  HtmlPageLoader(Node globalContext, {bool useShadowDom: true,
         SyncedExecutionFn executeSyncedFn: noOpExecuteSyncedFn})
         : super(useShadowDom: useShadowDom, executeSyncedFn: executeSyncedFn) {
       this._globalContext = new HtmlPageLoaderElement(globalContext, this);
  
positive.code: 
    @override
    Future click({bool sync: true}) => loader.executeSynced(() {
          if (node is OptionElement) {
            return _clickOptionElement();
          } else {
            return _microtask(node.click);
          }
        }, sync);
  
    Future _clickOptionElement() {
      OptionElement option = node as OptionElement;
  
negative.code: 
    @override
    Future type(String keys, {bool sync: true}) => loader.executeSynced(() async {
      await focus(sync: false);
      await _fireKeyPressEvents(node, keys);
      if (node is InputElement || node is TextAreaElement) {
        // suppress warning by hiding field
        var node = this.node;
        var value = node.value + keys;
        node.value = '';
        await _microtask(
            () => node.dispatchEvent(new TextEvent('textInput', data: value)));
      }
      return blur(sync: false);
    }, sync);
  
    @override
    Future clear({bool sync: true}) => loader.executeSynced(() async {
      if (node is InputElement || node is TextAreaElement) {
        var node = this.node;
        await focus(sync: false);
        node.value = '';
        await _microtask(
            () => node.dispatchEvent(new TextEvent('textInput', data: '')));
        return blur(sync: false);
      } else {
        throw new PageLoaderException('$this does not support clear.');
      }
    }, sync);
  
    @override
    Future blur({bool sync: true}) =>
  