自定义等待尝试catch webdriver

时间:2017-06-19 17:59:43

标签: java selenium selenium-webdriver

我有一段代码需要存储在try catch块中。

这是一段代码。我正在谈论

    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块设置自定义超时。

我在暗中思考Wait()会做的伎俩(想想如果框架不可用隐式等待将尝试将DOM对象集中3秒然后移动到捕获)但它似乎不起作用。但它仍然等待60超时前的秒数并说明

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

任何人都可以指出我如何在超时中修改等待构建。或者在try catch block设置超时,这样如果框架不可用,我不必等待1分钟,只需继续编写脚本?

谢谢。

2 个答案:

答案 0 :(得分:1)

我找到了自己的答案。基本上我需要做的是修改try条件中的显式等待。所以后面的等待步骤将等待您指定的秒数。

这是代码示例

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());
}

答案 1 :(得分:0)

对于上面的try catch块,你首先要检查你的代码,然后等到你的预期条件变为true。为此,它将一直等到超时发生或你的条件为真,就像找到了元素一样或不。因此,实际修改可能不适用于您的情况。

其他方式可能是如果让我们说(假设从结束),你可以等待页面,然后你检查IFrame是否可用(因为假设一旦页面加载IFrame也将被加载)。你当然可以检查一下。

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

以上代码用于等待页面加载。此外,如果您有不同的要求,那么您可以发布更多关于如何等待IFrame的示例?是否在页面加载后加载IFrame?更多信息..