我们能否处理在使用selenium自动化网页时出现的chrome警报?

我们能否处理在使用selenium自动化网页时出现的chrome警报?,selenium,selenium-webdriver,Selenium,Selenium Webdriver,请遵循以下提到的步骤: 1.)访问此网站: 2.)输入任何垃圾邮件登录id和密码,然后出现对话框,显示: 用户或密码无效 3.)Q1:我有没有办法在这个对话框中输入“ok”按钮???因为我无法检查这个对话框的元素 4.)问题2:当你尝试登录gmail[密码不应保存]时,在输入登录详细信息后,它会问:你想保存这个网站的密码吗?这个弹出窗口可以处理吗?因为这里我也不能检查任何信息。Q1:Selenium可以使用警报界面与javascript(基于浏览器)警报交互 您可以尝试以下任一操作: 使用显式等

请遵循以下提到的步骤:

1.)访问此网站:

2.)输入任何垃圾邮件登录id和密码,然后出现对话框,显示: 用户或密码无效

3.)Q1:我有没有办法在这个对话框中输入“ok”按钮???因为我无法检查这个对话框的元素


4.)问题2:当你尝试登录gmail[密码不应保存]时,在输入登录详细信息后,它会问:你想保存这个网站的密码吗?这个弹出窗口可以处理吗?因为这里我也不能检查任何信息。

Q1:Selenium可以使用警报界面与javascript(基于浏览器)警报交互

您可以尝试以下任一操作:
  • 使用显式等待

    Wait<WebDriver> wait = new FluentWait<>(driver).withTimeout(5, TimeUnit.SECONDS).pollingEvery(500,msecs).ignoring(NoSuchElementException.class  
    Alert alert = wait.until(ExpectedConditions.alertIsPresent());
    alert.accept();
    
  • 使用webdriver/chromedriver功能(处理意外警报异常)

    Q2:我无法复制gmail的保存密码弹出窗口。但是,您应该能够通过使用
    .discouse()来完成此操作
    而不是
    .accept()


    注意:如果您使用谷歌chrome进行测试,请注意chrome通常会自动更新。如果Selenium alert交互与最新的chrome版本不兼容,它可能不会突然工作。有了这个,我建议您保持chromedriver exe和java绑定的更新。

    Q1:有没有办法在这个对话框中输入“ok”按钮???因为我无法检查这个对话框的元素

    答:对于需要处理警报的场景,您可以编写一个类似于下面提到的通用方法,并在调用/调用它时传递适当的参数:

    public static void handleAlert(WebDriver driver, boolean accept) {
      Alert popup = driver.switchTo().alert();
    
      if (accept)
          popup.accept();
      else
          popup.dismiss();
    
    }
    
    调用上述方法时,当您想要接受警报时,可以传递true,当您不想要接受警报时,可以传递false

    问题2:当你尝试登录gmail[密码不应保存]时,在输入登录详细信息后,它会问:你想保存这个网站的密码吗?这个弹出窗口可以处理吗?因为这里我也不能查看任何信息

    答:此方案中的解决方案将取决于正在使用的浏览器。当您使用Chrome浏览器时,您可以使用以下代码来处理所需的弹出窗口:

     ChromeOptions options = new ChromeOptions();
      options.addArguments("chrome.switches", "--disable-extensions --disable-extensions-file-access-check --disable-extensions-http-throttling --disable-infobars --enable-automation --start-maximized");
      options.setExperimentalOption("credentials_enable_service", false);
      options.setExperimentalOption("profile.password_manager_enabled", false);
      WebDriver driver = new ChromeDriver(options);
    

    如果您有任何进一步的疑问或以上解决方案不适合您,请告诉我。

    尝试使用JavascriptExecutor接受警报:

    ((JavascriptExecutor) driver).executeScript("window.confirm = function(msg) { return true; }");
    Alert alert=driver.switchTo().alert();
    alert.accept();
    

    您可以接受弹出的警报框,如下所示

    Alert alert = driver.switchTo().alert();
    String alertText = alert.getText();
    System.out.println("ERROR: (ALERT BOX DETECTED) - ALERT MSG : " + alertText);
    alert.accept();
    File outputFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
    String imageDetails = "C:\\Images";
    File screenShot = new File(imageDetails).getAbsoluteFile();
    FileUtils.copyFile(outputFile, screenShot);
    System.out.println("Screenshot saved: {}" + imageDetails);
    driver.close();
    

    嘿,如何在nodejs中传递这些功能
    ((JavascriptExecutor) driver).executeScript("window.confirm = function(msg) { return true; }");
    Alert alert=driver.switchTo().alert();
    alert.accept();
    
    Alert alert = driver.switchTo().alert();
    String alertText = alert.getText();
    System.out.println("ERROR: (ALERT BOX DETECTED) - ALERT MSG : " + alertText);
    alert.accept();
    File outputFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
    String imageDetails = "C:\\Images";
    File screenShot = new File(imageDetails).getAbsoluteFile();
    FileUtils.copyFile(outputFile, screenShot);
    System.out.println("Screenshot saved: {}" + imageDetails);
    driver.close();