2017-06-19 59 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,并根据你可以等待或不等待。 –