2017-06-05 19 views
0

フィールドを完了した後に表示される可能性のあるOKボタンをクリックする必要があります。表示には5秒かかることがあります。だから私は必要(if)存在を5秒待つ。ページフレームワークでPageFactoryを使用していますが、いくつかの解決策を見てきましたが、このコンテキストで実装する方法を理解できません。PageFactoryを使用する場合、Selenium Webdriver C#が待機する

[FindsBy(How = How.Name, Using = "OK")] 
private IWebElement alertOKBtn; 

public void PopulateFields //method to populate the form 
{ 
    // Populate fields 
    dateFromField.SendKeys(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss")); 
    // Click on this field 
    descriptionField.Click(); 

    //OK button might appear, might take 5secs - pseudcode 
    if (***alertOKBtn exists, wait for it for 5 secs..***) 
    { 
    alertOkBtn.Click(); 
    } 

    //continue populating form 

    } 

PopulateFields方法は次のように[テスト]から呼び出される: -

Pages.PTW.PopulateFields()。

Page.PTWはPageFactory.InitElements(browser.Driver、page)のgetメソッドです。戻るページ。

答えて

0

条件付き待機を追加する必要があります。つまり、コードが表示されるまで待ってからアクションを実行する必要があります。

DefaultWaitクラスを継承するWebDriverWaitクラスが目的を果たします。以下はコードスニペットです。だから、それを

public static string wait(IWebElement elem, int timeout ) //waits for existence of element up to timeout amount 
    { 
     try 
     { 
      var wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(timeout)); 
      wait.Until(ExpectedConditions.ElementToBeClickable(elem)); 
      return "true"; 
     } 
     catch (Exception e) //didnt appear so exception thrown return false 

     { 
      return "false"; 
     } 

- :

  //wait to see if alert popup appears - give it 8 secs 
     string waitToSee = browser.wait(alertOKBtn, 8); 

     if (waitToSee == "true") 
     { 
      alertOKBtn.Click(); //alert popup did appear 

     } 

その後、私は私のbrowser.classにメソッドを追加しました - :PopulateFieldsに私は今これを行う - それを解決するために管理

var wait = new WebDriverWait(this.driver, waitTime); 
wait.Until(ExpectedConditions.ElementToBeClickable(alertOkBtn)); 
alertOkBtn.Click(); 
+0

ありがとうございます! - ** this.driver **が認識されない "ドライバの定義と拡張メソッドがない..."私のC#の理解の欠如。そのクラスのthis.driverをどのように認識するか分かりませんか? –

+0

また、alertOkBtnが**表示されない可能性があります。**テストは** alertOkBtn.Click();を実行せずに**移動する必要があります。これが起こるならば。 –

+0

問題を解決できてうれしいです。私の場合のthis.driverはあなたの場合のブラウザです。 また、文字列の代わりにブール値を返し、コードが の場合、(waittosee) { // your logic } – Bendram

0

現在は最大8秒間待機し、表示されない場合は無視して移動します。ポインタのBendramありがとう。

関連する問題