5

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');
    });
  });
});

このコードを少なくとも 2 回実行すると、次のエラーが表示されます。

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

ログを分析すると、2 回目にhttps://soundcloud.com/streamにリダイレクトされたことがわかります。これは、すでにログインしていたことを意味します。

各テストの間に環境をクリアするためにいくつかの調査を行いましたが、次の行では問題が解決しないようです。

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

技術的には、ここで何が起こっているのかを理解することに非常に興味があります。おそらく、SoundCloud は、サーバー側にもいくつかの変数を格納するシステムを構築しました。この場合、ログインする前にログアウトする必要があります。しかし、私の質問は、各テスト間ですべてを完全に分離してクリアするにはどうすればよいですか? 各テスト間で環境を署名なしにする方法を誰かが知っていますか?

4

2 に答える 2

0

どこで casper.clear() を呼び出しましたか?

次のようなページを開いた直後に呼び出す必要があると思います。

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

ドキュメントから:現在のページ実行環境コンテキストをクリアします。以前に読み込まれた DOM コンテンツがまだアクティブなままになるのを避けるのに役立ちます。

于 2016-09-22T16:22:38.770 に答える