我正在尝试编写一个非常简单的CasperJS脚本,测试网站上的登录按钮。单击事件后,会在网站顶部打开一个模态窗口,以便您填写登录字段。
使用网站时,这非常有效。使用casperjs test my-script-file --engine=slimerjs
也完全正常。没有slimerjs,代码将失败。
按钮的定义方式:
<button class="btn btn-strong-submit" data-action="join">Join</button>
我的测试:
casper.test.begin('testing', 3, function suite(test)
{
casper.start();
casper.thenOpen("http://the-website-to-test-url", function()
{
casper.wait(5000, function(){
casper.thenClick("button.btn.btn-strong-submit");
});
});
casper.then(function () {
casper.wait(3000);
casper.capture("screen.png");
});
casper.then(function(){
casper.assertVisible("div.join_container");
});
casper.run(function()
{
test.done();
})
});
在网站上,单击按钮会跳转到http://the-website-to-test-url.com/#join,因为网站的工作方式是等待点击并使用jQuery捕获它,然后查找[data-action]、forms #[data-action],然后以这种方式构建URL。
但是CasperJS似乎无法理解从背景中捕获的jQuery点击。有什么想法吗?
终端输出的更新:
[info] [phantom] Starting...
[info] [phantom] Running suite: 4 steps
[debug] [phantom] opening url: http://www.MYURL.com/, HTTP GET
[debug] [phantom] Navigation requested: url=http://www.MYURL.com/, type=Other, willNavigate=true, isMainFrame=true
[debug] [phantom] url changed to "http://www.MYURL.com/"
[debug] [phantom] Successfully injected Casper client-side utilities
[info] [phantom] Step anonymous 2/4 http://www.MYURL.com/ (HTTP 200)
[info] [phantom] Step anonymous 2/4: done in 721ms.
[info] [phantom] Step anonymous 3/4 http://www.MYURL.com/ (HTTP 200)
[info] [phantom] Step anonymous 3/4: done in 731ms.
[info] [phantom] Step _step 4/5 http://www.MYURL.com/ (HTTP 200)
[info] [phantom] Step _step 4/5: done in 752ms.
[info] [phantom] wait() finished waiting for 5000ms.
[debug] [phantom] Mouse event 'mousedown' on selector: .btn.btn-strong-submit
[debug] [phantom] Mouse event 'mouseup' on selector: .btn.btn-strong-submit
[debug] [phantom] Mouse event 'click' on selector: .btn.btn-strong-submit
[info] [phantom] Step anonymous 5/5 http://www.MYURL.com/ (HTTP 200)
//After click URL should have changed to http://www.MYURL.com/#login
[info] [phantom] Step anonymous 5/5: done in 5772ms.
[info] [phantom] Step _step 6/6 http://www.MYURL/ (HTTP 200)
[info] [phantom] Step _step 6/6: done in 5792ms.
[info] [phantom] wait() finished waiting for 3000ms.
[debug] [phantom] Capturing page to /home/TEMP/screen.png
[info] [phantom] Capture saved to /home/TEMP/screen.png
[info] [phantom] Done 6 steps in 9367ms
wait
是异步的,而capture
则不是。把capture
放在回调函数里试试看是否会有变化:wait(3000, function(){this.capture("screen.png")});
。如果没有变化,请注册resource.error
、casper.page.onResourceTimeout
、remote.message
和page.error
事件。也许会出现错误。 - Artjom B.