【问题标题】:How to perfectly isolate and clear environments between each test?如何在每次测试之间完美隔离和清除环境?
【发布时间】:2014-07-29 03:39:36
【问题描述】:

我正在尝试使用 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');
    });
  });
});

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

CasperError: Cannot dispatch mousedown event on nonexistent selector: .header__login

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

我做了一些研究以清除每个测试之间的环境,但似乎以下几行不能解决问题。

phantom.clearCookies()
casper.clear()
localStorage.clear()
sessionStorage.clear()

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

【问题讨论】:

  • 您找到解决方案了吗?我有同样的问题

标签: phantomjs casperjs spookyjs


【解决方案1】:

要清除服务器端会话缓存,调用:phantom.clearCookies(); 对我有用。这清除了我在测试文件之间的会话。 此处示例:

casper.test.begin("Test", {
  test: function(test) {
    casper.start(
      "http://example.com",
      function() {
        ... //Some testing here
      }
    );
    casper.run(function() {
      test.done();
    });
  }, 
  tearDown: function(test) {
    phantom.clearCookies();
  }
});

如果您仍然遇到问题,请检查您执行测试的方式。

【讨论】:

    【解决方案2】:

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

    我认为您必须在打开如下页面后立即调用它:

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

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

    【讨论】:

      猜你喜欢
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      • 2020-05-26
      • 2021-05-13
      • 2017-06-06
      • 2016-10-18
      • 1970-01-01
      相关资源
      最近更新 更多