Flash PhantomJs点击一个闪光按钮

Flash PhantomJs点击一个闪光按钮,flash,phantomjs,casperjs,javascript,Flash,Phantomjs,Casperjs,Javascript,我正在尝试使用分叉的1.10.0版本和1.0.2 我的环境就是这样,船上有一个 flash支持运行得很好,但模拟点击却不行。 在下面的展示中,我从中取出一个flash按钮,并将其放入一个文件夹中 收到点击事件后,按钮标签从“点击我”更改为“哎哟” 因此,以下代码的预期结果将是: 但是,结果是 CasperJS代码: var casper = require('casper').create({ pageSettings: { loadPlugins: true } });

我正在尝试使用分叉的
1.10.0
版本和
1.0.2

我的环境就是这样,船上有一个

flash支持运行得很好,但模拟点击却不行。
在下面的展示中,我从中取出一个flash按钮,并将其放入一个文件夹中

收到点击事件后,按钮标签从“点击我”更改为“哎哟”

因此,以下代码的预期结果将是:

但是,结果是

CasperJS代码:

var casper = require('casper').create({
  pageSettings: {
    loadPlugins: true
  }
});

casper.start("http://fiddle.jshell.net/Da3q7/show/light/");

casper.wait(1000);

// CasperJS click
casper.then(function () {
  this.echo("Click", "INFO");
  this.click('#section04example1');
});

casper.wait(1000);

casper.then(function () {
  this.echo("Screenshot", "INFO");
  this.captureSelector('button-demo.png', '#section04example1');
  this.exit();
});

casper.run();

CasperJS只调用javascript事件,出于安全原因,这些事件不会触发Flash鼠标事件。
然而,PhantomJS
sendEvent
方法调用真实的浏览器事件

下一个问题是,元素必须在当前视口中可见,这在大多数情况下都需要scolling

最后,我编写了一个小CasperJS
clickRelative
扩展:

casper.clickRelative = function (selector, offset) {
  "use strict";

  var docSize = casper.evaluate(function () {
    return {width: document.width, height: document.height};
  });
  var position = this.getElementBounds(selector);
  if (position !== null) {

    var left = position.left + (offset.left || 0);
    var scrollX = this.page.viewportSize.width > docSize.width ? 0 :
      Math.min(left, docSize.width - this.page.viewportSize.width);

    var top = position.top + (offset.top || 0);
    var scrollY = this.page.viewportSize.height > docSize.height ? 0 :
      Math.min(top, docSize.height - this.page.viewportSize.height);

    var scrollOrig = {left: this.page.scrollPosition.left, top: this.page.scrollPosition.top};

    this.page.scrollPosition = {left: scrollX, top: scrollY};

    this.wait(10);
    this.then(function () {
      this.page.sendEvent("click", left - scrollX, top - scrollY, 'left');
    });
    this.wait(10);
    this.then(function () {
      this.page.scrollPosition = scrollOrig;
    });
  }
};
现在,我的脚本可以单击按钮并生成以下flash按钮的屏幕截图:

var casper = require('casper').create({
  pageSettings: {
    loadPlugins: true
  }
});

casper.start("http://www.adobe.com/devnet/flash/quickstart/button_component_as3.edu.html");

casper.wait(1000);

casper.then(function () {
  this.echo("Click", "INFO");
  // The button has a margin so we have to add a little offset to the
  // click position:
  this.clickRelative('#section04example1', {left: 30, top: 15});
});

casper.wait(1000);

casper.then(function () {
  this.echo("Screenshot", "INFO");
  this.captureSelector('button-demo.png', '#section04example1');
  this.exit();
});

casper.run();