我们可以处理使用硒自动化网页时出现的Chrome警报吗?

时间:2017-05-30 01:02:38

标签: selenium selenium-webdriver

请按照以下步骤操作:

1。)访问此网站:http://demo.guru99.com/V4/index.php

2.)打入任何垃圾登录ID和密码,然后出现对话框说: 用户或密码无效

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

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

4 个答案:

答案 0 :(得分:0)

Q1: Selenium可以使用Alert界面与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();
    

  • 直接获取警告

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

  • 使用webdriver / chromedriver功能(处理意外警报异常)

    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    capabilities.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.ACCEPT);
    

    Q2:我无法复制gmail的保存密码弹出窗口。但是,您应该可以使用.dismiss();代替.accept();来完成此操作。

    注意:如果您使用谷歌浏览器进行测试,请注意,Chrome通常会自动更新。如果Selenium警报交互与最新的chrome版本不兼容,则可能无法突然发挥作用。有了这个,我建议你保持你的chromedriver exe和java绑定更新。

  • 答案 1 :(得分:0)

    Q1:我有什么方法可以打击&#34;确定&#34;此对话框中的按钮???因为我无法检查此对话框的元素。

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

    public static void handleAlert(WebDriver driver, boolean accept) {
      Alert popup = driver.switchTo().alert();
    
      if (accept)
          popup.accept();
      else
          popup.dismiss();
    
    }
    

    在调用上述方法时,如果您想接受提醒,可以传递 true ,当您不想接受提醒时,可以传递 false

    Q2:当你尝试登录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);
    

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

    答案 2 :(得分:0)

    尝试使用JavascriptExecutor接受提醒:

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

    答案 3 :(得分:0)

    您可以接受如下弹出的警报框。

    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();