【问题标题】:Using CasperJs with RequireJS将 CasperJs 与 RequireJS 一起使用
【发布时间】:2015-08-02 20:49:27
【问题描述】:

我想使用 CasperJS 在我的网页上编写一个功能测试,即:

  1. 填写登录表单
  2. 提交登录表单
  3. 检查动态加载的内容

前两个步骤我已经完成了,但第三个步骤有问题。我登录后得到的 HTML 结构与我在里面看到的不太一样,即 Chrome 开发者控制台。缺少一些内容 - 就像我只能在我的 index.html 文件中获得可用的结构,但仅此而已。

这是我的测试代码:

var casper = require('casper').create();
var loginForm = 'form[name="login"]';
var orderMenuItem = '.rst-menu-orders';

casper.start('https://mywebpageaddress.com/');

casper.waitForSelector(loginForm, function(){
    this.echo(this.getCurrentUrl());
    this.fillSelectors(loginForm, {
        'input[name="username"]': '1234',
        'input[name="password"]': '1234'
    }, true);
});

casper.thenOpen('http://mywebpageaddress.com/subpage', function(){
    this.echo(this.getCurrentUrl());

    this.waitForSelector('.rst-tab-menu-element', function() {
        this.echo(document.querySelectorAll('.rst-tab-menu-element').length);
    });
});

casper.run();

所以每次我运行这个测试时,我都会收到 5000 毫秒超时过期的消息,这意味着 '.rst-tab-menu-element' 不存在,但我知道它存在于 DOM 中,因为我可以在 Chrome 中看到它,即.

我已经尝试等待 20000 毫秒,希望内容能够加载,但似乎问题出在其他问题上。我正在使用 Require JS 加载我的 javascript 文件,我想知道 - 也许这可能是一个问题?对于如何完成这项工作的一些提示,我将不胜感激。

我也收到参考错误:

Error: ReferenceError: Can't find variable: define
Error: ReferenceError: Can't find variable: jQuery
Error: ReferenceError: Can't find variable: require
Error: ReferenceError: Can't find variable: requirejs

【问题讨论】:

  • 代码看起来不错。您是否已转储页面源以查看已加载的内容?请注册resource.errorpage.errorremote.messagecasper.page.onResourceTimeout 活动 (Example)。可能有错误。
  • @ArtjomB。谢谢。我得到了参考错误所以现在至少我知道出了什么问题。
  • 这可能意味着某些脚本无法加载。你试过以casperjs --ssl-protocol=any --ignore-ssl-errors=true --web-security=false script.js 运行吗?您能否将错误添加到您的问题中?
  • @ArtjomB。我添加了错误。我想我必须注入丢失的脚本。我已经尝试使用这些标志运行测试,但我得到了同样的错误。
  • 顺便问一下你用的是什么PhantomJS版本,你试过升级到2.0.0吗?

标签: javascript testing requirejs casperjs functional-testing


【解决方案1】:

有了以上调试错误的建议,发现潜在问题就容易多了。

此外,我建议使用 CasperJS 测试模块的替代方法:

casper.test.begin('test script', 0, function(test) {
    casper.start(url);

    casper.then(function myFunction(){
        //...
    });

    casper.run(function () {
        //...
        test.done();
    });
});

如果要注入脚本,可以使用,例如:

phantom.injectJs('C:/casperjs/lib/jquery-1.11.0.js');

另外,测试模块,一些项目的使用敬请期待,比如: document.querySelectordocument.querySelectorAll

一起使用
this.evaluate(function () {
    //...
}); 

所以,它避免了 DOM 渲染问题。

希望我的建议对你以后的脚本有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-06
    • 2023-04-09
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多