2017-08-24 5 views
0

Seleniumで非同期関数の完了を処理しようとしています。 非同期js関数は、ボタンをクリックした後に実行する必要があります。SeleniumのWebDriverに対する非同期コマンド

セイlistenFor(arguments[0])は、クリックハンドラの実行の終了をリッスンし、click actionが送出される前にリッスンを開始します。次の関数では、私はClick actionの前にclickイベントをlistenしています。これはC#のasync/awaitを使用しています。ここで

1. Started async function  
2. Before Click 
3. Started to listen 

我々はClickアクションが派遣されていないことを確認できます

private async void ExecuteJsAsync(IActionElement button) 
    { 
     Console.WriteLine("Started async function"); 

     var result = Task<bool>.Factory.StartNew(() => 
     { 
      Console.WriteLine("Started to listen"); 

      var script = "listenFor(arguments[0])"; 
      var executor = (IJavaScriptExecutor)browser; 

      return executor.ExecuteAsyncScript(script); 
     }); 

     Console.WriteLine("Before click"); 
     new Actions(browser).Click(button).Perform(); 
     Console.WriteLine("After click"); 

     _result = await result; 
    } 

は、しかし、私は、ログの次のシーケンスを取得しています。質問は次のとおりです。

  1. それは非同期に(ここではClick action & listener)セレンでいくつかのタスクを実行することは可能ですか?
  2. なぜセレンはClick actionをブラウザに送信できないのですか?
  3. ClickSendKeysなどのSeleniumコマンドはメインのJavaScriptスクリプトで実行されますか?

答えて

0

IMHO、ロジックがそのようであれば:

非同期jsの機能は、ボタンをクリックした後に実行するために開始する必要があります。

await Task.Run(() => { new Actions(browser).Click(button).Perform(); }).ContinueWith((_task) => { async code to execute AFTER Click (Perform method completion?) }) 

セレンの固有のロジックについてはまだ認識して、申し訳ありませんがないので、それが可能だと確信していない:

あなたがチェーンのような何かをする必要があります。

関連する問題