在CasperJS中与弹出窗口共享cookie

时间:2014-08-01 19:41:20

标签: javascript cookies casperjs

我有一个CasperJS项目,需要一个新窗口(单击“#view_item”按钮时打开)才能访问父窗口的cookie和会话。目前,新窗口显示错误,因为它认为没有用户登录。

this.click("#view_item");

this.waitForPopup(/.+/, function() {
    this.capture("parent_window.jpg");
});

this.withPopup(/.+/, function()
{
    // Delay for testing
    this.wait(2000);
    this.capture("new_window.jpg");
});

在打开窗口,在弹出窗口中加载它们并刷新页面之前,我有什么办法可以将cookie转储到文件中吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试从父窗口覆盖cookie(这只比将其写入文件要短一些)。

var cookie = this.evaluate(function(){
    return window.document.cookie; // just a string
});

this.click("#view_item");

this.waitForPopup(/.+/, function() {
    this.capture("parent_window.jpg");
});

this.withPopup(/.+/, function()
{
    // Delay for testing
    this.wait(2000);
    this.evaluate(function(cookie){
        window.document.cookie = cookie;
    }, cookie);
    this.wait(100); // little time to actually change the cookie
    this.reload();
    this.wait(2000, function(){  // only necessary if page is built with JS
        this.capture("new_window.jpg");
    });
});

如果子窗口没有取出cookie,我认为没有更简单的方法。也许casperjs的错误报告是有序的。


问题可能是您早期捕获屏幕截图。 wait是步骤异步步骤函数,而capture是同步的。在wait之前调用capture表示在 wait之后执行<{1}} {。}}。

capture