2016-02-28 6 views
7

私はPhantomJS 2を使用してページの要素をクリックしています。しかし、これらの要素をクリックするとイベント(例:ページの読み込み)が発生するかどうかはわかりません。PhantomJS 2:イベントをトリガーしなかったクリックの検出

私は両方のケースを扱うことができるようにしたい:

  1. 要素上でのクリックが、私は新しいページがロードされるまで待つしたいのですが、ページの読み込みを開始します。

  2. クリックしてもイベントが発生しない場合は、長い時間切れを待つことなくそのイベントを認識できます。

でPhantomJS 1は、私は単純に次のようにクロージャを利用することができます。私は間の「通信チャネル」として機能loading変数の上に閉じてい

ここ
function click(page, elem, callback) { 
    var loading = false; 

    page.set('onLoadStarted', function() { 
    loading = true; 
    }); 

    page.set('onLoadFinished', function() { 
    callback('click triggered page load'); 
    }); 

    triggerClick(page, elem); 

    setTimeout(function() { 
    if (! loading) { 
     callback('click did not trigger page load'); 
    } 
    }, 100); 
} 

イベントハンドラと関数はsetTimeoutにあります。

  1. クリックは、ページの読み込みをトリガーする場合は、ページがロードされた後、onLoadFinishedハンドラがコールバックを呼び出します。

  2. クリックがページロードをトリガーしない場合、setTimeoutの関数は100ms後にコールバックを呼び出します(これは許容されます)。

このコードはPhantomJSの下でうまく機能してきた1 PhantomJS 2アンダー

が、残念ながら、onLoadStartedonLoadFinishedのためのイベントハンドラはもうloading変数にアクセスすることはできません(つまり、彼らは通りに動作しません。それが見えるようにもう閉鎖する)。

今、私はPhantomJS 2でどのように同じ動作を達成できるのだろうかと思っています。

PS:私は私が代わりのようなpage.set(...)を使用してのPhantomJS 2にpage.property(...)を経由してイベントハンドラをインストールする必要があることを承知しているPhantomJS 1.

編集:私はノードパッケージファントムを使用しています(https://www.npmjs.com/package/phantom)をノード&の間のブリッジとして使用します。

+0

PhantomJS(1又は2)には 'page.set'はありません。 node.jsとPhantomJSの間に何らかのブリッジを使用していますか? –

+0

ああ、確かに - 私はノードパッケージのファントム(https://www.npmjs.com/package/phantom)を使用しています。明らかにそのことを忘れていた;)。しかし、私は上記の私の問題の解決策にどのように関与しているのだろうかと思っています...それは実際にはphantomjsではなく、このノードブリッジの問題ですか? – Oliver

答えて

0

私の解決策は、実際にノードブリッジを放棄し、純粋なファントムを使用することでした。これはさえPhantomJS 2と、魔法のように動作するために、次の対応するコードになる:

function click(page, elem, callback) { 
    var loading = false; 

    page.onLoadStarted = function() { 
    loading = true; 
    }; 

    page.onLoadFinished = function() { 
    callback('click triggered page load'); 
    }; 

    triggerClick(page, elem); 

    setTimeout(function() { 
    if (! loading) { 
     callback('click did not trigger page load'); 
    } 
    }, 100); 
} 
関連する問題