2017-06-19 6 views
0

try catchブロックに格納する必要のあるコードがあります。try catch catch webdriverのカスタムウェイト

ここはコードです。私は今、それが動作に設定されてきたように、私は

try{ 
     this.driver.manage().timeouts().implicitlyWait(3000, TimeUnit.MILLISECONDS); 

     this.wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("PegaGadget0Ifr"))); 


    } catch(Exception e){ 
     System.out.println(e.toString()); 
    } 

について話しているが、フレームが利用できない場合、それはキャッチに進む前に60秒間待機しますすることでトライcatchブロックにカスタムタイムアウトを設定することです。

私はimpliclyWait()がトリックをやっていると思っていました(フレームが利用できない場合は暗黙のうちにDOMオブジェクトを3秒間プールしてからキャッチするように試みます)しかし、時間切れになるまでに60秒待ってから

'Timed out after 60 seconds waiting for frame to be available:' 

誰でも私がタイムアウトで待ち時間を変更する方法を教えてもらえますか? try catchブロックでタイムアウトを設定すると、フレームが利用できない場合は1分待たずにスクリプトを続行するだけです。

ありがとうございます。

答えて

1

私は自分の答えを見つけました。基本的には、try条件で明示的にwaitを変更する必要があります。そのあと待機するステップは、指定した秒数を待機します。ここ

は、コード例です

try{ 


    WebDriverWait customWait = new WebDriverWait(driver, 2); //2 is for seconds before timingout 

    customWait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("PegaGadget0Ifr"))); 


} catch(Exception e){ 
    System.out.println(e.toString()); 
} 
0

上記のtry catchブロックについては、最初にチェックしてから期待される条件がtrueになるまで待つようにしています。このため、タイムアウトが発生するか、要素のように条件が満たされるまで待ちます発見されたかどうか。実際の変更はあなたのケースでは成立しないかもしれません。

他の方法では、(前提から最後まで)、ページがあるのを待つことができ、iframeが利用可能かどうかをチェックすることができます(ページが読み込まれると仮定してからIFrameも読み込まれます) 。確かにそれを確認することができます。

上記のコードは、ページが読み込まれるまで待機するためのコードです。また、別の要件がある場合は、IFrameをどのように待っているかの例を投稿できます。ページが読み込まれた後にIFrameが読み込まれますか?さらに詳しい情報..

+0

ページがロードされ、基本的にするとき、それは(別のボタンやフレームである。このボタンのいくつかのオープン「タブ」を持って、時には枠が外れます、リプレイをありがとうjavascriptの負荷のため)私は古い要素の例外を取得するので、ページから。したがって、このコード行ではthis.wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id( "PegaGadget0Ifr")));いくつかの操作を行う前にフレームが完全にロードされるのを待っています。前に述べたように待機が必要な場合もありますが、ほとんどの場合フレームが分離されていないときではなく、リードを待つ必要はありません。 –

+0

しかし、このtry try catchブロックは、リロードフレームが不要なときに待機します。時間切れになるまでに1分ほどの時間を費やしています。 –

+0

ページに実際にIframe要素が含まれているかどうかを確認するための条件を1つ追加する方法、要素がある場合はそれ以外の場合は待機してくださいtry catch catch(); Assert.assertTrue(driver.getPageSource()。contains(textOnThePage)); これは、ページソースにIframeがあるかどうかをチェックし、それに基づいて待機するか待機しないかをチェックします。 –