1

i'm wondering why cannot get casperjs to recognize the modal popup:

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);});

running the above gives me timeout in the waitForPopup part..

How to make this work and how to use casper.withPopup properly with the popup?

4

2 回答 2

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() 对脚本故障排除非常有帮助。我有它们,就像断点一样,如果我知道应该通过的测试失败了,我可以很容易地看到发生了什么。

于 2013-09-24T19:56:49.650 回答
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

于 2016-03-10T22:29:47.833 回答