Phantomjs 如何在每次测试之间完全隔离和清除环境?
我正在尝试使用CasperJS连接到SoundCloud。有趣的是,一旦您登录并稍后重新运行登录功能,以前的登录仍处于活动状态。在继续之前,以下是代码:Phantomjs 如何在每次测试之间完全隔离和清除环境?,phantomjs,casperjs,spookyjs,Phantomjs,Casperjs,Spookyjs,我正在尝试使用CasperJS连接到SoundCloud。有趣的是,一旦您登录并稍后重新运行登录功能,以前的登录仍处于活动状态。在继续之前,以下是代码: casper.thenOpen('https://soundcloud.com/', function() { casper.click('.header__login'); popup = /soundcloud\.com\/connect/; casper.waitForPopup(popup, function() {
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
如果您分析日志,您将看到第二次,您被重定向到,这意味着您已经登录
我做了一些研究,以清除每次测试之间的环境,但似乎以下几行并不能解决问题
phantom.clearCookies()
casper.clear()
localStorage.clear()
sessionStorage.clear()
从技术上讲,我真的很想了解这里发生了什么。也许SoundCloud构建了一个系统来在服务器端存储一些变量。在这种情况下,我必须在登录前注销。但我的问题是,如何在每次测试之间完全隔离和清除所有内容?有人知道如何在每次测试之间取消环境签名吗?您在哪里调用casper.clear() 我想你必须在打开一个页面后立即调用它,如:
casper.start('http://www.google.fr/', function() {
this.clear(); // javascript execution in this page has been stopped
//rest of code
});
从文档中:清除当前页面执行环境上下文。有助于避免以前加载的DOM内容仍然处于活动状态。要清除服务器端会话缓存,请调用:
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();
}
});
如果仍然存在问题,请检查执行测试的方式 你找到解决办法了吗?我也有同样的问题