Session CasperJS在.then()之后丢弃会话

Session CasperJS在.then()之后丢弃会话,session,phantomjs,casperjs,Session,Phantomjs,Casperjs,.then()会导致会话在没有活动会话的情况下删除/(重新)加载页面,这有什么原因吗 在下面的示例中,您可以看到如何通过登录建立会话,然后执行搜索并加载结果页面。该会话在此导航中仍然有效,但是当使用.then()在现在显示的页面上分离测试时,DOM不再与登录用户将看到的内容对应。我不明白为什么 casper.start("http://example.dev", function() { this.test.assertExists('form[name="login"]', 'login

.then()会导致会话在没有活动会话的情况下删除/(重新)加载页面,这有什么原因吗

在下面的示例中,您可以看到如何通过登录建立会话,然后执行搜索并加载结果页面。该会话在此导航中仍然有效,但是当使用.then()在现在显示的页面上分离测试时,DOM不再与登录用户将看到的内容对应。我不明白为什么

casper.start("http://example.dev", function() {
  this.test.assertExists('form[name="login"]', 'login form is shown'); // PASS
  this.fill('form[name="login"]', {
    user: "username",
    password: "Password1"
  }, true);
});

casper.then(function() {
  this.test.assertExists('body[data-userid="42"]', 'User is logged in'); // PASS
  this.sendKeys("input#search", "12345");
  this.click("button#submit_search"); // form submit causes redirect
});

casper.then(function() {
  this.test.assertExists('body.page_id_12345', 'search for "12345" loads page?id=12345'); // PASS
  this.test.assertExists('body[data-userid="42"]', 'User is logged in'); // PASS
});

// PROBLEM BELOW:

casper.then(function() {
  this.test.assertExists('body[data-userid="42"]', 'User is logged in'); // FAIL
});

casper.run();

在OS X上使用CasperJS 1.1.0-beta4和PhantomJS

您的测试输出说明了什么

您可以尝试这样做,看看是否会抛出相同的错误:

casper.waitForSelector('body[data-userid="42"]',

    function success() {

        test.assertExsists('body[data-userid="42"]', 'User is logged in');
        //do something...
    }
);

不,这不应该失败。您是否尝试将失败的断言移到上一步中,以查看在同一测试中有两个断言是否也失败。您使用哪个PhantomJS版本?嗨,Artjom,在前一步中可以多次测试断言,而且没有问题。换句话说,如果我注释掉
casper.then(function(){
在失败的断言之前,整个套件都通过了。PhantomJS版本是1.9.8在失败前不久,您是否尝试过截屏(
casper.capture(fn)
)?您是否尝试过打印页面源代码(
casper.getHTML()
)要查看您是否在正确的页面上?您是否尝试查看当前URL(
casper.getCurrentUrl()
)执行上述所有操作,确认最后一个
then block
显示正确的页面,而最后一个
then block
显示登录页面,就好像会话被转储并重新加载当前页面一样(访问受限)已尝试。我不明白为什么casper会添加任何类型的导航步骤?这很奇怪。您可以尝试升级到PhantomJS 2.1.1和CasperJS 1.1-beta5。使用waitForSelector我得到一个超时:
fail“body[data userid=“42”]”在5000ms内仍然不存在。
。通过
casper.evaluate()查看DOM
,我看到了匿名用户所期望的标记(即,测试运行程序没有与之交互的内容)