【问题标题】:Phantomjs failing to load webpage using angularjsPhantomjs 无法使用 angularjs 加载网页
【发布时间】:2017-02-21 00:00:41
【问题描述】:

我正在使用 capserjs 来测试我的应用程序。但问题是,正文没有加载,即在呈现的<ng-Outlet> 标签中没有标签/元素。任何等待时间都无济于事。不知道是什么导致了这个问题。任何指针都会有所帮助。

casper.start('URL', function() {
    this.viewport(1300,750);
    this.waitForSelector('#user',function(){
        this.sendKeys('#user','username');
        this.sendKeys('#passwd','passwd');
        this.echo('All values are entered');
    },function(){},20000);
});

casper.thenEvaluate(function(){
    document.getElementById('sign_in').click();
});

casper.then(function(){
    this.wait(5000);
    this.captureSelector('InitialPage_1.png','body');
    this.echo(this.getCurrentUrl());
    this.waitForText("Trash",function(){
        this.captureSelector('InitialPage_2','html');
    }, function(){
        this.echo(this.getCurrentUrl());
        this.echo(this.getHTML());
    }, 15000);
});

casper.run();

注意:当我使用 chrome 或 FF 驱动程序使用 selenium 运行同一页面时,它工作正常。

【问题讨论】:

  • 您在此处添加了一些(未缩进!!!)代码。你在什么时候有问题? casper.wait 是异步的,但 casper.captureSelector 是同步的,所以 casper.captureSelector 将始终在 before casper.wait 之前执行,无论您尝试等待多少时间。
  • 感谢您的回复。如果您注意到,我已经延迟了 15000 时间以使文本“垃圾”出现在页面上。但是“InitialPage_2”永远不会打印出来。我进一步分析了这个问题......我正在使用 phantomcss 和 phantomxhr 来解决这个问题。所以我注意到的是,API 调用永远不会进行,因此如果主体为空。执行在某个时候突然停止。有什么方法可以调试为什么没有进行这些调用??
  • 如果您尝试渲染整个页面,我不明白您为什么要使用casper.captureSelectorhtmlbody 都代表可见页面)。试试casper.capture。另一个问题是你为什么使用casper.thenEvaluate(function(){ document.getElementById('sign_in').click(); }); 而不仅仅是casper.thenClick('#sign_in')
  • 正如您所说的那样,这里发布的代码确实是意外代码!!。我按照您的建议使用了casper.capture,但结果是一样的。我有一个没有内容的空白页。对于第二个问题,我的第一次尝试是casper.click('#sign_in'),它就是拒绝工作!!!所以我选择了 Jquery 方法。但我真正的问题是,对于使用 angular 开发的项目,是否有理由在 phantomjs 中调用 API 调用?
  • 您使用哪个 PhantomJS 版本?请注册resource.errorpage.errorremote.messagecasper.page.onResourceTimeout 活动(Example)。可能有错误。

标签: javascript phantomjs casperjs


【解决方案1】:

经验法则,在请求新资源(例如提交表单)时,始终使用等待For,并且该函数内部执行捕获选择器

casper.start('URL', function() {
 ...
});


casper.thenEvaluate(function(){
  document.getElementById('sign_in').click();
});

casper.wait(5000, function(){
  this.captureSelector('InitialPage_1.png','body');
  this.echo(this.getCurrentUrl());
});

casper.run();

注意这里有几个问题,不知道你为什么要使用评估和发送密钥,因为还有其他选择,但是嘿嘿

【讨论】:

  • 感谢您的 cmets @Rippo。我是 CapserJS 的新手,但使用 Selenium。所以希望你理解对SendKeys的附件。代码很笨拙,但这对我来说没问题。真正的问题,在使用 phantomjs 渲染 angularjs 项目时会有什么问题吗?任何建议都可能有所帮助。
  • 没有水疗中心的工作正常但是记住事情需要一点时间才能到达 dom 所以你可能需要使用 casper.waitFOR 更多
猜你喜欢
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多