2017-10-31 7 views
0

私のウェブサイトでセレンの待ち時間を改善するには、特定のテーブルの描画が終了したかどうかを確認する必要があります。セレンでDOMにjavascriptの変数と関数を挿入

私が調べているサイトでは、datatables.netを使用して、描画前と描画後の両方のイベントハンドラを提供しています。

私のjavascriptのコードは

var isDrawn; 
var table = $("#CustomField-443c6726-05c3-48d0-8dfe-c1a26d749cdf").DataTable(); 

table.on('preDraw', function() { 
    console.log('Redraw started at: ' + new Date().getTime()); 
    isDrawn = false; 
}); 

table.on('draw', function() { 
    console.log('Redraw finished at: ' + new Date().getTime()); 
    isDrawn = true; 
}); 

function returnDrawStatus() { 
    console.log(isDrawn); 
    return isDrawn; 
}; 

私はクロームのdevのツールでコンソールウィンドウにこれを貼り付ける場合は、イベントハンドラが接続されているようだ、と私は「isDrawn」にアクセスすることができます...次のようになります。変数と 'returnDrawStatus()'関数があります。

セレンのjavascriptエグゼキュータを使用して同じことをしようとすると、イベントハンドラが添付されます(セレンスクリプトを一時停止してテーブルの順序を変更するとコンソールログメッセージが表示されます)が、これは、スクリプト文字列変数は、returnDrawStatus()という値では、JavaScriptを実行する方法である

System.InvalidOperationException occurred 
    HResult=0x80131509 
    Message=unknown error: returnDrawStatus is not defined 

..私は次のエラーを取得するよう「IsDrawn」は、

internal static bool ExecuteJavascriptReturn(IWebDriver driver, string script) 
{ 
    var result = ((IJavaScriptExecutor) driver).ExecuteScript(script); 
    return (bool)result; 
} 

TLDR

  • 私が定義されている場合は、スクリプト内の変数や関数は、彼らが後の時点でセレンjavascriptのエグゼキュータとアクセスすることはできませんなぜ? (なしページ更新)私はセレンを経由して

おかげ

答えて

0

C#+セレンwebdriverを

((IJavaScriptExecutor)driver).ExecuteScript("window.foo = false;"); 
引き金になるこの特定のイベントハンドラを待つことができますどのよう
  • は、
  • 関連する問題