casperjs +模态弹出窗口

时间:2013-05-18 11:03:00

标签: popup casperjs

我想知道为什么不能让casperjs识别模态弹出窗口:

var casper = require('casper').create();
casper.start('http://www.zulutrade.com/trader/140682?Lang=en');
casper.waitForSelector("form[name=aspnetForm] button#main_BtnFollow",
function success() {
    this.test.assertExists("form[name=aspnetForm] button#main_BtnFollow");
    this.click("form[name=aspnetForm] button#main_BtnFollow");
},
function fail() {
    this.test.assertExists("form[name=aspnetForm] button#main_BtnFollow");
});

casper.waitForPopup(/popup\.html$/, function() {
    this.test.assertEquals(this.popups.length, 1);
});
casper.run(function() {this.test.renderResults(true);});

运行上面的命令让我在waitForPopup部分超时..

如何使这项工作以及如何使用弹出窗口正确使用casper.withPopup?

2 个答案:

答案 0 :(得分:3)

啊,你在使用Resurrectio吗?根据我的经验,你需要调整他们生成的任何脚本。我主要只将它用于元素名称。

我只在你的脚本中看到断言。我想你需要告诉casper在看到你的模态之前点击一下。这样的事可能吗?

casper.then(function() {
    this.clickLabel('.Follow', 'a');
});

casper.waitForSelector("#modal_popup", function() {
    this.echo('see the modal!');
    this.capture('screenshotofmodal.png', { top: 0, left:0, width:1000, height:  4000}); 
 }); 

PS
使用capture()非常有助于对脚本进行故障排除。我有它们就像断点,我可以很容易地看到如果我知道应该传递的测试失败的话会发生什么。

答案 1 :(得分:1)

我发现自己正在实施原始超时以使casper与模态交互很好地发挥作用:

casper.start(uri).then(function() {
  var slideshow = 'a.photo_gallery_icon_modal_launch';
  casper.wait(2000, function(){
    casper.thenEvaluate(function(sel) {
      $elem = jQuery(sel).first();
      $elem.click();
    }, slideshow)
  }).wait(1000, function(){
    // wait a sec for modal to show up before taking pic
    casper.capture('foo.png', {
      top: 0,
      left: 0,
      width: 1280,
      height: 1024
    })
  })
});

还有waitForSelector,但我没有取得那么多成功,因为我的模态的内容也是异步的,因此wait甚至waitForUrl的使用更合适。

http://docs.casperjs.org/en/latest/modules/casper.html#waitforselector