标签: casperjs

为什么CasperJS表单提交不重定向到下一页?

这是我的第一个casper测试,所以我仍然在努力学习基础知识.我想在登录表单上填写用户名和密码,然后提交.然后确认下一页是否显示"注销"链接(确认用户已登录).

但据我所知,当被调用,URL仍然是相同的.看起来没有帖子或重定向到下一页正在发生.我究竟做错了什么?

casper.start "http://test.local.mycompany.local/", ->
    @echo 'at ' + @getCurrentUrl()
    @fill 'form', { UserAlias : 'joe', Password : 'password' }, true

casper.then ->
    @echo 'at ' + @getCurrentUrl()
    @test.assertExists '#log-off-link', 'log-off link exists'

casper.run ->
    @test.done()
Run Code Online (Sandbox Code Playgroud)

所以@getCurrentUrl的回显都返回相同的URL,这是错误的.

coffeescript casperjs

5
推荐指数
1
解决办法
3840
查看次数

CasperJS和警报框

如何测试我的页面上的警告框被调用?我可以抓住警报框的文本并进行评估吗?

我在CasperJS中的点击是这样完成的:

casper.waitForSelector('a[href="javascript:UserLogin()"]',
    function success() {
        this.test.comment("Submiting the bad login info");
        this.test.assertExists('a[href="javascript:UserLogin()"]');
        this.click("a#h_login");
    },
    function fail() {
        this.test.assertExists('a[href="javascript:UserLogin()"]');
});
Run Code Online (Sandbox Code Playgroud)

UserLogin函数检查,在这种情况下,返回:

alert('Login has failed.');
Run Code Online (Sandbox Code Playgroud)

我该如何检查?

javascript testing tdd phantomjs casperjs

5
推荐指数
2
解决办法
5224
查看次数

在PhantomJS上禁用LocalStorage进行清洁测试?

几天前刚刚开始与CasperJS合作.

我今天创建了一个脚本来测试LocalStorage的行为方式以及是否可以禁用它,因为这是为了防止测试相互影响.

背景

我正在开发一个在第一页上要求输入值的Backbone向导.单击"继续"按钮时,它会将值保存到LocalStorage,然后在第二页上显示.

casperjs test <script.js>有和无用--local-storage-quota=0.

第一次尝试

写了一个执行以下操作的CasperJS脚本:

  1. 加载页面
  2. 检查模型的内容(空,应该是)
  3. 单击继续
  4. 加载后检查模型的内容(包含值,应该如此)
  5. 使用casper.thenOpen()直接打开第2页作为新页面
  6. 加载后检查模型的内容

如果启用了LocalStorage,则步骤6应与步骤4具有相同的结果(模型中存在值).

如果禁用了LocalStorage,则步骤6应与步骤2具有相同的结果(模型为空).

每次运行脚本时,我都确定已启用LocalStorage.'--local-storage-quota = 0'参数没有任何区别.

第二次尝试

此时,我决定确定LocalStorage是否附加到特定的Casper实例.如果是这样,那么我可以通过为每个测试创建一个新的Casper实例来解决这个问题,从而从一个干净的平板开始.

var Casper = require( 'casper' );

casper = Casper.create();
casper.test.begin( 'test for Local Storage, part 1', 0, function suite (test) { ... });

casper = Casper.create();
casper.test.begin( 'test for Local Storage, part 2', 0, function suite (test) { ... });
Run Code Online (Sandbox Code Playgroud)

但是,第二个测试套件永远不会运行.我不知道Casper是不打算在同一个脚本中创建多个实例,或者我是否只是错误地组织它.

附录

我应该补充说,所有测试套件都以以下步骤结束,以防相关:

casper.run( function () {
    test.done();
    casper.exit();
});
Run Code Online (Sandbox Code Playgroud)

文档仅指定test.done()是必需的.但是,我的测试脚本将永远挂起,直到我将调用添加到casper.exit().

javascript testing local-storage phantomjs casperjs

5
推荐指数
1
解决办法
3019
查看次数

网站抓取:等到网站完全加载

我需要下载以下网页:http://m.10bet.com/#leage_panel#10096

这是一个体育博彩页面,我需要报价.所以,首先这看起来很简单.但是,这是发生的事情(您可以使用例如浏览器的开发人员工具来检查):

  1. 打开URL
  2. 该页面加载一个初始HTML,随后调用ajax请求以检索引号
  3. 但是,引用包含在json中,但是它们被模糊化,因此不可能直接从ajax调用中解析它们.此外,网页的javascript也被混淆了.所以没有机会直接读取请求中的引号.

相反,我需要使用能够评估javascript的无头浏览器.HtmlUnit for java是不够的,因为它不提供强大的javascript功能.因此,PhantomJS与CasperJS的结合是我目前的选择.我使用以下脚本应用CasperJS:

var casper = require('casper').create();

casper.start('http://m.10bet.com/#leage_panel#10096', function() {
    var url = 'http://m.10bet.com/#leage_panel#10096';
    this.download(url, '10bet.html');
});

casper.run(function() {
    this.echo('Done.').exit();
});
Run Code Online (Sandbox Code Playgroud)

但是,此脚本不会加载整个页面.只是初始页面.如何加载浏览器中显示的完整网页?

ajax web-scraping casperjs

5
推荐指数
1
解决办法
8265
查看次数

在casperjs中启动slimerjs的正确方法是什么(使用绝对路径)?

slimerjs发射

好吧,我可以通过指定slimer.bat文件的路径来启动slimerjs:C:\ bin\slimerjs\slimerjs.bat然后执行我的文件.

但是如果我修改casperjs文件(在bin \中)并修改slimer的默认exec:

    'env_varname': 'SLIMERJS_EXECUTABLE',
    'default_exec' : 'C:\bin\slimerjs\slimerjs.bat'
Run Code Online (Sandbox Code Playgroud)

当我执行casper命令时:

    casperjs --engine=slimerjs test.js
Run Code Online (Sandbox Code Playgroud)

它不起作用,slimerjs.bat的路径似乎被忽略了.

我也试过了:https://github.com/laurentj/slimerjs/blob/master/BUILD.md

但单独的slimerjs.exe是不够的,我需要在我正在执行我的测试的当前文件夹中有application.ini和omni.ja,我不想在每个文件夹中添加一些文件.

我想要的只是在casperjs中使用引擎属性执行slimerjs,无论我在哪个文件夹,就像在phantomjs中所以我需要设置一个绝对路径(或从root的相对路径).

我不想在slimerjs.bat文件夹中指定我想要执行的文件夹或js测试:casperjs test C:/bin/try/test.js --engine = slimerjs.

这里有一个类似的问题:https: //github.com/n1k0/casperjs/issues/591

编辑(感谢Darren Cook的回答)了解更多详情:

set PATH=%PATH%;C:\\bin\\slimerjs
Run Code Online (Sandbox Code Playgroud)

如果我为slimer设置Windows PATH,当我执行casperjs test --engine = slimerjs test.js时,我有这样的消息:

失败的slimerjs

但是在test.js文件夹中添加这两个文件可以解决问题.

路径

所以我想我必须修改slimerjs bat文件,从slimerjs.bat文件夹设置:callexec路径,而不是当前的test.js文件夹.

这里 :

:callexec
if ["%HIDE_ERRORS%"]==[""] (
    %SLIMERJSLAUNCHER% -app "%SLIMERDIR%application.ini" %PROFILE% -attach-console -no-remote %__SLIMER_ARGS%
) ELSE (
    %SLIMERJSLAUNCHER% -app "%SLIMERDIR%application.ini" %PROFILE% -attach-console -no-remote %__SLIMER_ARGS% 2>NUL
)
Run Code Online (Sandbox Code Playgroud)

用:

SET SLIMERDIR=%~dp0
Run Code Online (Sandbox Code Playgroud)

问题是我不熟悉这种语法(批处理文件),它可能已经是正确的,问题不是来自这里.

但我观察到它似乎从当前文件夹中寻找application.ini和omni.ja,而不是slimerjs文件夹.

PS:第二个想法不起作用,但现在我知道它来自slimerjs.

编辑:

REM % ~ d[rive] …
Run Code Online (Sandbox Code Playgroud)

exe relative-path absolute-path casperjs slimerjs

5
推荐指数
1
解决办法
9616
查看次数

理解CasperJS中的evaluate函数

我想了解在哪种情况下我应该或必须使用该evaluate功能.

我已经阅读了有关evaluateCasperJS功能的API文档,但我不确定在哪种情况下我应该使用这个函数.DOM上下文是什么意思?有人可以提供一个例子吗?

phantomjs casperjs

5
推荐指数
1
解决办法
9243
查看次数

如何在每次测试之间完美隔离和清除环境?

我正在尝试使用CasperJS连接到SoundCloud。有趣的是,一旦您登录并稍后重新运行登录功能,以前的登录仍处于活动状态。在继续之前,这里是代码:

casper.thenOpen('https://soundcloud.com/', function() {
  casper.click('.header__login');

  popup = /soundcloud\.com\/connect/;

  casper.waitForPopup(popup, function() {
    casper.withPopup(popup, function() {
      selectors = {
        '#username': username,
        '#password': password
      };

      casper.fillSelectors('form.log-in', selectors, false);

      casper.click('#authorize');
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

如果您至少运行两次此代码,您应该看到以下错误出现:

CasperError: Cannot dispatch mousedown event on nonexistent selector: .header__login
Run Code Online (Sandbox Code Playgroud)

如果您分析日志,您将看到第二次,您将被重定向到https://soundcloud.com/stream,这意味着您已经登录。

我做了一些研究来清除每个测试之间的环境,但是似乎以下几行代码无法解决问题。

phantom.clearCookies()
casper.clear()
localStorage.clear()
sessionStorage.clear()
Run Code Online (Sandbox Code Playgroud)

从技术上讲,我真的很想了解这里发生的事情。也许SoundCloud构建了一个系统,还可以在服务器端存储一些变量。在这种情况下,我必须先注销才能登录。但是我的问题是,如何才能完美隔离并清除每个测试之间的所有内容?有人知道每次测试之间如何使环境无符号吗?

phantomjs casperjs spookyjs

5
推荐指数
1
解决办法
863
查看次数

如何在CasperJS中断言失败时继续测试用例?

发生故障时是否有办法继续测试套件?举例:

casper.test.begin("",3,function suite(){
  casper.start(url).then(function(){
    test.assert(...);
    test.assert(...); //If this assert fail, the script stop and the third assert isn't tested
    test.assert(...);
  }).run(function(){
    test.done();
  });
});
Run Code Online (Sandbox Code Playgroud)

我希望所有断言都经过测试,即使有些失败.可能吗?

javascript testing assert casperjs

5
推荐指数
1
解决办法
2218
查看次数

如何在不知道css选择器的情况下使用CasperJS单击链接

<a href="pss.exe?TRANSACTION=CGI_JUMP&amp;SESSDATA=randomstuff&amp;SKIN=default&amp;LANG=en-US">
  Change passwords
</a>

<a href="psk.exe?TRANSACTION=CGI_JUMP&amp;SESSDATA=randomstuff&amp;SKIN=default&amp;LANG=en-US">
  Unlock accounts
</a>
Run Code Online (Sandbox Code Playgroud)

一个链接有一个pss.exe,另一个链接有psk.exe

InnerText是"更改密码"或"解锁帐户"

那么如何点击"更改密码"链接.A标签没有类或名称,也没有任何简单的方法可供我使用css选择器.

html javascript css-selectors casperjs

5
推荐指数
1
解决办法
6612
查看次数

未捕获TypeError:useValue,useFactory,数据不可迭代!Angular 4 cli项目错误

我是Angular 4的新手,我刚刚通过Angular Cli创建了一个项目,我得到了错误

Uncaught TypeError: useValue,useFactory,data is not iterable! 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我无法解决它.我安装并重新安装了cli,我只是想知道如何解决它.我所做的只是

ng new myprj 
 mkdir myprj 
 ng serve
Run Code Online (Sandbox Code Playgroud)

node.js phantomjs casperjs karma-runner angular

5
推荐指数
1
解决办法
2121
查看次数