2017-06-19 66 views
0

我有一段代碼需要存儲在try catch塊中。自定義等待try 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秒是可以設置自定義超時值try catch塊。

我想隱式地等待()會做的伎倆(思考如果框架不可用隱式等待將嘗試將DOM對象池3秒,然後移動捕捉),但它似乎並不工作,但它仍然等待超時前60秒,並說明

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

任何人都可以指出我可能如何修改超時等待生成。或者在try catch塊上設置超時時間,所以如果frame不可用並且只需繼續腳本,我不必等待1分鐘?

謝謝。

回答

1

我找到了答案我自己。基本上我需要做的是在試用條件下修改明確的等待。所以後面的等待步驟將等待您指定的秒數。

這裏是代碼示例

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。因此,它會一直等待,直到發生超時或者你的條件爲true,如元素是發現與否。所以實際的修改可能不適用於你的情況。

其他方式可以如果讓我們說(假設從結束),你可以等待頁面,然後你檢查IFrame是否可用(因爲假設一旦頁面加載IFrame也將被加載) 。你當然可以檢查。

driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS); 

上面的代碼是等待直到您的頁面加載。此外,如果你有不同的要求,那麼你會發布更多關於如何等待IFrame的例子?頁面加載後,IFrame是否稍後加載?更多信息..

+0

感謝您的重播,基本上是當頁面加載它有不同的按鈕和一些這個按鈕打開「選項」這是一個框架,有時幀被分離(中由於JavaScript負載)從頁面,所以我得到陳舊元素異常。所以這行代碼做這個.wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id(「PegaGadget0Ifr」)));在進行一些操作之前等待一個幀被完全加載。有時候如前所述需要等待,但大多數情況下不是當框架不分離時不需要等待領先。 –

+0

但這個嘗試catch塊不會在重新加載幀不需要時等待。並且在超時之前花費大量時間完成1分鐘。 –

+0

如何添加1個更多的條件來檢查頁面是否實際包含Iframe元素,如果它有元素,那麼等待否則出來try catch block(); Assert.assertTrue(driver.getPageSource()。contains(textOnThePage)); 所以這將檢查你的頁面源代碼是否有Iframe,並根據你可以等待或不等待。 –