【问题标题】:How to handle Javascript Alert/pop up window in selenium webdriver如何在 selenium webdriver 中处理 Javascript 警报/弹出窗口
【发布时间】:2015-03-06 16:15:47
【问题描述】:

我不确定 selenium webdriver 是否可以处理 Javascript 警报/弹出窗口。

我有一个类似的场景
1.用户上传一个xls文件并点击上传按钮
2. 将显示警报/弹出窗口。点击窗口上的“确定”

能够自动执行上述场景,但在运行脚本时会显示警报/弹出窗口。

他们的解决方法是我们可以处理 javascript 警报/弹出窗口吗?

【问题讨论】:

    标签: java javascript selenium selenium-webdriver


    【解决方案1】:

    您也可以尝试等待警报出现然后接受它

    下面是代码(点击上传按钮后):

    try{
       //Wait 10 seconds till alert is present
       WebDriverWait wait = new WebDriverWait(driver, 10);
       Alert alert = wait.until(ExpectedConditions.alertIsPresent());
    
       //Accepting alert.
       alert.accept();
       System.out.println("Accepted the alert successfully.");
    }catch(Throwable e){
       System.err.println("Error came while waiting for the alert popup. "+e.getMessage());
    }
    

    【讨论】:

      【解决方案2】:

      切换到默认内容 接受“OK”后关闭警报 否则,您的警报来自另一个窗口,您必须切换到该窗口才能关闭

      driver.switchTo().alert().accept();    
      driver.switchTo().alert().dismiss();  
      driver.switchTo().alert().defaultConent();  
      

      【讨论】:

        【解决方案3】:

        嘲笑它。直接在UI后面调用javascript:

        WebDriver driver = new AnyDriverYouWant();
        if (driver instanceof JavascriptExecutor) {
            ((JavascriptExecutor)driver).executeScript("yourScript();");
        }
        

        【讨论】:

          【解决方案4】:

          我们将与 Alert 接口一起使用四种方法:

          void dismiss() – 一旦弹出窗口出现,dismiss() 方法就会点击“取消”按钮。

          void accept() – accept() 方法在弹出窗口出现后立即单击“确定”按钮。

          String getText() – getText() 方法返回警告框上显示的文本。

          void sendKeys(String stringToSend) – sendKeys() 方法将指定的字符串模式输入到警报框中。

          if(isAlertPresent(ldriver)){
          Alert alert = ldriver.switchTo().alert(); 
          System.out.println(alert.getText());
          alert.accept();
          

          }

          【讨论】:

            【解决方案5】:

            Alert 是一个接口,具有以下抽象方法

            void accept();
            void dismiss();
            String getText();
            void sendKeys(String keysToSend);
            
            new WebDriverWait(driver,10).
            until(ExpectedConditions.alertIsPresent()).accept();
            
            alertIsPresent() internally return the 
            driver.switchTo.alert(); then we don't have to write it explicitly
            
            hope this is been helpful
            

            【讨论】: