代码之家  ›  专栏  ›  技术社区  ›  plaidshirt

Selenium WebDriver中按条件中断站点加载

  •  -1
  • plaidshirt  · 技术社区  · 6 年前

    有多个文件应上载并等待输出。它在处理过程中打开一个类似AJAX的窗口。如果处理时间太长, 关闭 应单击此窗口上的按钮,然后应再次提交文件。

    我试图使用下面的代码,但没有单击 关闭 10秒后按下按钮。

    public void clickOnSendButton() throws InterruptedException {
            WebDriverWait wait = new WebDriverWait(driver, 10);
            WebElement webElement;
            try {
                driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
                driver.findElement(sendButton).click();
                log.info("Processing in progress!");
                webElement = wait.until(ExpectedConditions.presenceOfElementLocated(By.className("button-download")));
            } catch (TimeoutException ex) {
                webElement = null;
            } finally {
                driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);
            }
    
            if (webElement == null) {
                driver.findElement(popUpClose).click();
                TimeUnit.SECONDS.sleep(1);
                driver.findElement(sendButton).click();
            }
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Kireeti Annamaraj    6 年前

    尝试使用“visibilityOfElementLocated”条件,而不是“presenceOfElementLocated”,如下所示:

    webElement = wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("button-download")));
    

    使用循环:

    try {
          driver.findElement(By.id("button-submit")).click();
          Thread.sleep(3000);//3 seconds
          log.info("Processing in progress!");
    
          for(int i=0; i<10;i++){
            try{
              webElement = driver.findElement(By.className("button-download"));
            } catch (Exception e){e.printStackTrace();}
    
            if(webElement.isDisplayed())
              break;
            else
              Thread.sleep(1000);
          }
    
        } catch (TimeoutException ex) {ex.printStackTrace();} finally {
          driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);
        }
    
    
        if (!webElement.isDisplayed() ) {
          driver.findElement(By.xpath("/html/body/div[4]/div[1]/button/span[1]")).click();
          Thread.sleep(2000);
          driver.findElement(By.id("button-submit")).click();
        }