Отключите всплывающее окно "Восстановить страницы? Chrome не завершил работу правильно". в selenium webdriver Java
Хотя я видел некоторые связанные вопросы, я задаю этот вопрос снова, поскольку я все еще сталкиваюсь с проблемой. У меня есть веб-сайт, который запрашивает код подтверждения входа в систему при первом входе в систему, а затем не запрашивает его при последующих попытках входа. Если я не использую настраиваемый профиль браузера, сайт будет запрашивать код подтверждения каждый раз, когда селен запускает логин. Следовательно, я использовал индивидуальный профиль браузера, как показано ниже (это не вопрос)
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() неправильно закрывает браузер. Я пробовал несколько настроек, но всплывающее окно все равно появляется.
- файл настроек ->
"exit_type":"none"
(а также "нормальный") иexit cleanly = true
- настройки сайта -> всплывающие окна и перенаправления -> Заблокировано (рекомендуется)
- Я также пытался проверить, существуют ли предупреждения, но там написано "Нет предупреждений". Скрипт не распознает всплывающее окно как предупреждение.
Как я могу убедиться, что браузер открывается ОБЫЧНО каждый раз после того, как 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 и пароли, чтобы предотвратить проблему с кодом подтверждения входа, упомянутую ранее.
1 ответ
Я решил эту проблему, установив для параметра exit_type значение normal в настройках после настройки каталога пользователя.
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");