2017-08-24 65 views
0

我想處理Selenium中異步函數的完成。 異步js函數必須在點擊按鈕後開始執行。Selenium中的WebDriver的異步命令

listenFor(arguments[0])偵聽點擊處理程序執行的結束,並在調度click action之前開始偵聽它。在下一個函數中,我使用C#的async/await在Click action之前偵聽單擊事件。

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. Started async function  
2. Before Click 
3. Started to listen 

在這裏我們可以看到,Click行動沒有分派。而問題是:

  1. 是否可以執行多個任務異步硒(這裏Click action & listener)?
  2. 爲什麼Selenium無法將Click action發送到瀏覽器?
  3. Selenium命令如ClickSendKeys在主javascripts線程中執行嗎?

回答

0

恕我直言,如果邏輯是這樣的:

異步js函數必須啓動按鈕點擊後執行。

,那麼你需要做的像一個鏈條:

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

對不起,不知道還沒有關於硒的內在邏輯,所以不知道它是可行的。

相關問題