禁用弹出窗口“恢复页面?Chrome 未正确关闭。” 在 selenium webdriver Java 中

San*_*jay 5 java popup selenium-webdriver chrome-profile

虽然我看到了一些相关的问题,但我再次提出这个问题,因为我仍然面临这个问题。我有一个网站,在首次登录时要求输入登录验证码,然后在以后的登录实例中不再询问。如果我不使用自定义浏览器配置文件,则每次 selenium 运行登录时,该网站都会询问验证码。因此我使用了如下自定义的浏览器配置文件(这不是问题

options.addArguments("user-data-dir=C:\\Users\\user\\AppData\\Local\\Google\\Chrome\\User Data\\default");
Run Code Online (Sandbox Code Playgroud)

然后,测试完成后,我使用退出浏览器

driver.quit();
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

问题是,下次我再次运行测试时,Chrome 浏览器将打开并弹出“恢复页面?Chrome 未正确关闭”的消息。登录后该网站再次要求输入验证码。输入验证码不是我的脚本的一部分,因此脚本失败。然后我通过单击顶角的 X 手动关闭浏览器。然后我再次运行测试,chrome浏览器正常打开,没有弹出窗口,并且网站不要求验证码,登录成功。然后,脚本通过 driver.quit() 关闭浏览器本身。然后我再次运行测试,chrome 浏览器打开并弹出窗口,测试再次失败。这表明 driver.quit() 没有正确关闭浏览器。我已经尝试了几种设置,但仍然弹出窗口。

  1. 首选项文件 -> "exit_type":"none"(以及“正常”)和exit cleanly = true
  2. 站点设置 -> 弹出窗口和重定向 -> 阻止(推荐)
  3. 我也尝试过检查警报是否存在,但它显示“无警报”。脚本未将弹出窗口检测为警报。

如何确保在上次测试运行中 driver.quit() 关闭浏览器后,浏览器每次都能正常打开?请帮忙。

下面是我的代码:我使用 chrome 扩展,所以我也无法禁用扩展。

        String extFilePath = "C:\\ChromeDriver\\Salesforce_inspector.crx";

        System.setProperty("webdriver.chrome.driver","C:\\chromedriver\\chromedriver.exe");
        ChromeOptions options = new ChromeOptions();
        options.addExtensions(new File(extFilePath));
        options.addArguments("--disable-notifications");
        options.addArguments("user-data-dir=C:\\Users\\user\\AppData\\Local\\Google\\Chrome\\User Data\\default");
        options.addArguments("--start-maximized");

        WebDriver driver = new ChromeDriver(options);


        try 
        { 
            driver.switchTo().alert(); 
            System.out.println("alert accepted"); 
        }   // try 
        catch (NoAlertPresentException Ex) 
        { 
            System.out.println("No alert");
        }           

        driver.get("salesforce url");
Run Code Online (Sandbox Code Playgroud)

我不想使用隐身模式,因为我需要保留cookie和密码,以防止前面提到的登录验证码问题。

小智 4

我解决了这个问题,在设置用户目录后,在首选项中将 exit_type 设置为正常。

        Map<String, Object> prefs = new HashMap<String, Object>();
        prefs.put("profile.exit_type", "Normal");
        options.setExperimentalOption("prefs", prefs);
Run Code Online (Sandbox Code Playgroud)

在你的情况下会是这样的

        String extFilePath = "C:\\ChromeDriver\\Salesforce_inspector.crx";

    System.setProperty("webdriver.chrome.driver","C:\\chromedriver\\chromedriver.exe");
    ChromeOptions options = new ChromeOptions();
    options.addExtensions(new File(extFilePath));
    options.addArguments("user-data-dir=C:\\Users\\user\\AppData\\Local\\Google\\Chrome\\User Data\\default");
    options.addArguments("--start-maximized");
    Map<String, Object> prefs = new HashMap<String, Object>();
    prefs.put("profile.exit_type", "Normal");
    options.setExperimentalOption("prefs", prefs);

    WebDriver driver = new ChromeDriver(options);


    try 
    { 
        driver.switchTo().alert(); 
        System.out.println("alert accepted"); 
    }   // try 
    catch (NoAlertPresentException Ex) 
    { 
        System.out.println("No alert");
    }           

    driver.get("salesforce url");
Run Code Online (Sandbox Code Playgroud)