Java 自定义等待尝试捕获webdriver

Java 自定义等待尝试捕获webdriver,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我有一段代码需要存储在try-catch块中 这是一段代码。我是说 try{ this.driver.manage().timeouts().implicitlyWait(3000, TimeUnit.MILLISECONDS); this.wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("PegaGadget0Ifr"))); } catch(Excep

我有一段代码需要存储在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秒,然后进入catch。是否可以为try-catch块设置自定义超时

我在想,如果帧不可用,隐式wait会做一些小动作。隐式wait会尝试将DOM对象放入池中3秒,然后移动到catch,但它似乎不起作用。但它仍然会等待60秒,然后超时并声明这一点

'Timed out after 60 seconds waiting for frame to be available:'
有人能告诉我如何修改等待构建超时吗。或者在try-catch块上设置一个超时,以便在帧不可用时不必等待1分钟,只需继续脚本


谢谢。

对于上面的try-catch块,您正在使代码先进行检查,然后等待,直到预期条件变为真。因此,它将继续等待,直到超时发生或条件为真,就像找到或没有元素一样。因此,实际的修改可能不适用于您的情况

另一种方法可能是,如果让我们从末尾开始假设,您可以等待页面被加载,然后检查IFrame是否可用,因为假设一旦加载页面,IFrame也将被加载。你当然可以检查一下

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

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

我自己找到了答案。本质上,我需要做的是修改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());
}

感谢您的重播,本质上当页面加载时,它有不同的按钮,其中一些按钮打开了一个框架选项卡,有时由于页面上的javascript加载,框架被分离,所以我得到了陈旧的元素异常。这行代码的作用是:this.wait.untilExpectedConditions.frameToBeavailable并切换到tby.idpegadget0ifr;正在等待帧完全加载,然后再执行某些操作。有时,如前所述,需要等待,但大多数情况下,不是在帧未分离时,不需要等待导程。但是,此try-catch块所做的是在不需要重新加载帧时等待。在超时前1分钟,这样做会消耗大量时间。再添加1个条件来检查页面是否确实包含Iframe元素,如果页面包含该元素,则等待,否则出来尝试catch块;Assert.assertTruedriver.getPageSource.ContainestExtonThePage;所以这将检查您的页面源是否有Iframe,并基于此检查您是否可以等待。它将如何检查框架是否存在?我知道它将包含iframe,因为如果frame没有出现,脚本将根本不会运行。但在执行的一个步骤中,有一个框架被分离的可能性。这就是我使用try块来重新加载它,如果它发生了。如果没有必要重新加载iframe,那么我需要什么。等待步骤只需等待几秒钟,而不是整整一分钟。