【问题标题】:custom wait for try catch webdriver自定义等待 try catch webdriver
【发布时间】:2017-06-19 17:59:43
【问题描述】:

我有一段代码需要存储在 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 块设置自定义超时。

我在想implicitlyWait() 可以解决问题(考虑如果frame 不可用,隐式等待将尝试将DOM 对象池化3 秒,然后移动到catch),但它似乎不起作用。但它仍然等待60超时前几秒并声明

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

谁能指出我如何修改等待构建超时。或者在 try catch 块上设置一个超时,这样如果框架不可用,我就不必等待 1 分钟,然后继续执行脚本?

谢谢。

【问题讨论】:

    标签: java selenium selenium-webdriver


    【解决方案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());
    }
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 感谢您的重播,基本上在加载页面时,它有不同的按钮,其中一些按钮打开作为框架的“选项卡”,有时框架会从页面,所以我得到过时元素异常。那么这行代码做了什么 this.wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("PegaGadget0Ifr")));在执行某些操作之前等待帧完全加载。有时需要等待,如前所述,但大多数情况下,当框架未分离时,不需要等待引导。
      • 但是这个 try catch 块所做的是在不需要重新加载帧时等待。并且在超时前整整 1 分钟会消耗大量时间。
      • 如何添加1个条件来检查页面是否真的包含Iframe元素,如果它有元素然后等待,否则出来try catch block(); Assert.assertTrue(driver.getPageSource().contains(textOnThePage));因此这将检查您的页面源是否具有 iframe,并基于此您可以等待或不等待。
      • 如何检查框架是否存在?我知道它将包含 iframe,因为如果框架没有出现,脚本就根本不会运行。但是在执行的一个步骤中,可能会分离框架。也就是说,如果发生这种情况,我会使用 try 块重新加载它。如果 iframe 不需要重新加载,我正在寻找什么。等待步骤只是等待几秒钟而不是整分钟。
      猜你喜欢
      • 2018-12-20
      • 2020-01-01
      • 1970-01-01
      • 2021-11-09
      • 2017-02-06
      • 1970-01-01
      • 2021-09-08
      • 2017-01-05
      • 2021-12-19
      相关资源
      最近更新 更多