2016-08-05 9 views
0

私はWebdriverを初めて使用し、c#を書きました。私はスクリプトで多くのthread.sleep()コマンドを使用して、Seleniumが試しすぎてクリックしすぎていないことを確認しました。研究の多く時に私は、これは眉をひそめていると、それを行うには、「より良い」の方法があるたので、私は使用することを開始しました: - :Selenium c#wait.until(expectedconditions)...関数が画面上のオブジェクト/要素の検索に失敗しました

wait = new WebDriverWait(driver, new TimeSpan(0, 0, 0, 10)); 
-

wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("FieldId"))); 

を待って別のクラスで定義されています

そのような要素例外::私はこれだけは取得せずにスクリプトを実行しているの2/10倍の仕事を得ることができます

要素を見つけることができませんが......

私はthread.sleepの使用を中止しました。この問題の例はたくさんあります。たくさんの研究の後、私はいつもこれがアドバイスされた方法だと思っていますが、それは全く信頼できないようです。私は何かを逃したか?要素は2秒後に常に存在し、10秒が経過する前にエラーが発生します。私は似たように聞こえる少なくとも10の他の投稿を読んだことがあるが、どれも解決しない... Thread.Sleep(5000)

+0

'WebDriverWait'を使用している場合、' TimeoutException'をスローしながら 'No such element exception'をどうやって得ることができますか? –

+0

@SaurabhGaur 'Until()'が無視リストにない場合に例外をスローする –

+0

あなたは暗黙の待ち時間も使用していますか?暗黙的および明示的な待機の両方を同時に使用すると、予期しない結果が生じる可能性があります。 – JeffC

答えて

1

ウェイターの作成後に、NoSuchElementExceptionタイプをウェイターのIgnoreExceptionTypesに追加してみてください。あなたが示すタイムアウトが期限切れにされる前に、ウェイターが戻っている場合は例外がそれが現在は無視されていない発生したため、一般的には

wait = new WebDriverWait(driver, new TimeSpan(0, 0, 0, 10)); 
wait.IgnoreExceptionTypes(typeof(NoSuchElementException)); 
wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("FieldId"))); 

は、それはです。

WebDriverWaitクラスは、DefaultWaitクラスから派生したものです。どちらもgithubで見直すことができますが、実際にどのように使用するかを理解する上で役立ちます。

+0

例外タイプは 'NoSuchElementException'となる点を除いて、あなたの答えはほとんど正しいです。 –

+0

@ kovpaev-alexeyが更新されました。ありがとう! – digitalnoiz

+0

@ digitalnoizそのことに感謝します。私はそれを私の無視に追加しようとし、それが問題を解決するのに役立つかどうかを見ます。私がそれをしたとき、私は働いていれば私はここにはいません。いずれにせよアドバイスをいただきありがとうございます。 – Mase

関連する問題