3

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

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

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

driver.quit();

在此处输入图像描述

问题是,下次我再次运行测试时,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");

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

4

1 回答 1

2

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

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

在你的情况下将是这样的

        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");
于 2020-09-04T14:23:32.187 回答