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

Jul*_*nec 5 phantomjs casperjs spookyjs

我正在尝试使用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构建了一个系统,还可以在服务器端存储一些变量。在这种情况下,我必须先注销才能登录。但是我的问题是,如何才能完美隔离并清除每个测试之间的所有内容?有人知道每次测试之间如何使环境无符号吗?

小智 0

你在哪里调用 casper.clear() ?

我认为你必须在打开页面后立即调用它,例如:

casper.start('http://www.google.fr/', function() {
    this.clear(); // javascript execution in this page has been stopped
    //rest of code
});
Run Code Online (Sandbox Code Playgroud)

从文档中:清除当前页面执行环境上下文。有助于避免先前加载的 DOM 内容仍然处于活动状态。