我有一段代码需要存储在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 秒,然后再进入捕获,是否可以为尝试捕获块设置自定义超时。
我在想隐式等待((可以解决问题(认为如果帧不可用,隐式等待将尝试池化 DOM 对象 3 秒,然后移动到捕获(,但它似乎不起作用。但它仍然等待 60 秒,然后超时并声明
'Timed out after 60 seconds waiting for frame to be available:'
谁能指出我如何修改超时的等待构建。 或者在 try catch 块上设置超时,这样我就不必在帧不可用时等待 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());
}
对于上面的 try catch 块,您正在使代码首先检查,然后等待,直到您的预期条件变为真。因此,为此,它将继续等待,直到超时发生或您的条件为真,例如是否找到元素。因此,实际修改可能不适用于您的情况。
另一种方式可能是,如果假设(假设从结束(,您可以等待页面存在,然后检查 IFrame 是否可用(因为假设一旦页面加载 IFrame 也会被加载(。你当然可以检查一下。
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
上面的代码用于等待您的页面加载。此外,如果您有不同的要求,那就太好了,您可以发布更多关于您如何等待 IFrame 的示例?IFrame是否在页面加载后加载?更多信息..