【问题标题】:Alert handling in Selenium WebDriver (selenium 2) with Java使用 Java 在 Selenium WebDriver (selenium 2) 中处理警报
【发布时间】:2012-01-04 21:28:15
【问题描述】:

我想检测是否弹出警报。目前我正在使用以下代码:

    try {
        Alert alert = webDriver.switchTo().alert();

        // check if alert exists
        // TODO find better way
        alert.getText();

        // alert handling
        log().info("Alert detected: {}" + alert.getText());
        alert.accept();
    } catch (Exception e) {
    }

问题是如果网页的当前状态没有警报,它会等待特定的时间,直到达到超时,然后抛出异常,因此性能非常糟糕。

有没有更好的方法,也许是我可以用于动态发生警报的警报事件处理程序?

【问题讨论】:

    标签: java selenium selenium-webdriver popup alert


    【解决方案1】:

    这对我来说是使用 Explicit Wait from here WebDriver: Advanced Usage

    public void checkAlert() {
        try {
            WebDriverWait wait = new WebDriverWait(driver, 2);
            wait.until(ExpectedConditions.alertIsPresent());
            Alert alert = driver.switchTo().alert();
            alert.accept();
        } catch (Exception e) {
            //exception handling
        }
    }
    

    【讨论】:

    • 这很有趣,可以解决问题。是否可以将等待方法的超时设置为零?
    【解决方案2】:

    编写如下方法:

    public boolean isAlertPresent() {
        try {
            driver.switchTo().alert();
            return true;
        } // try
        catch (Exception e) {
            return false;
        } // catch
    }
    

    现在,您可以使用上面写的方法检查是否存在警报,如下所示:

    if (isAlertPresent()) {
        driver.switchTo().alert();
        driver.switchTo().alert().accept();
        driver.switchTo().defaultContent();
    }
    

    【讨论】:

      【解决方案3】:
      警报警报 = driver.switchTo().alert(); 警报.accept();

      您也可以拒绝提醒框:

      警报警报 = driver.switchTo().alert(); alert().dismiss();

      【讨论】:

        【解决方案4】:
        try 
            {
                //Handle the alert pop-up using seithTO alert statement
                Alert alert = driver.switchTo().alert();
        
                //Print alert is present
                System.out.println("Alert is present");
        
                //get the message which is present on pop-up
                String message = alert.getText();
        
                //print the pop-up message
                System.out.println(message);
        
                alert.sendKeys("");
                //Click on OK button on pop-up
                alert.accept();
            } 
            catch (NoAlertPresentException e) 
            {
                //if alert is not present print message
                System.out.println("alert is not present");
            }
        

        【讨论】:

          【解决方案5】:

          你可以试试

           try{
                  if(webDriver.switchTo().alert() != null){
                     Alert alert = webDriver.switchTo().alert();
                     alert.getText();
                     //etc.
                  }
              }catch(Exception e){}
          

          如果这不起作用,您可以尝试遍历所有窗口句柄并查看警报是否存在。我不确定警报是否使用 selenium 作为新窗口打开。

          for(String s: webDriver.getWindowHandles()){
           //see if alert exists here.
          }
          

          【讨论】:

          • 遗憾的是,这两种解决方案都不起作用。第一个和我的代码一样慢,因为它在超时时已经创建了异常。第二个不识别警报。
          • @djangofan - 你没有烦人的延误吗?
          • @Alp - 究竟是由什么引起的?你指的是什么?
          • 如果您使用该代码来验证警报是否存在,如果不存在应该会有延迟。是这样吗?因为我试图尽量减少延迟/超时,但没有运气。
          • 另外,也许尝试更新硒罐。当我使用 Selenium 时,他们几乎每月发布一次新版本,有时每月发布两次。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-02
          • 1970-01-01
          相关资源
          最近更新 更多