t.me/atinfo_chat Telegram группа по автоматизации тестирования

Не видаляються файли scoped_dir..., створені chrome з папки temp при запуску тестів через Selenoid+Go Grid на Windows OS

grid
windows
selenoid
Теги: #<Tag:0x00007fb302133960> #<Tag:0x00007fb302132f38> #<Tag:0x00007fb302132538>

(Grosha) #1

Є готовий проект, де тести запускаються через Selenium Grid, до якого підключені ноди на Windows віртуалках.
Переводжу цей проект на Selenoid + Go Grid, підключив ці ж Windows віртуалки до Go Grid. На віртуалці запустив Selenoid так:

..\selenoid_windows_amd64.exe -conf ...\browsers.json -disable-docker -limit 2 > ...\selenoid.log 2>&1

Файл browser.json:

{
  "chrome": {
    "default": "78.0",
    "versions": {
      "78.0": {
        "image": ["...\\chromedriver.exe", "--log-level=DEBUG", "--whitelisted-ips=IP"]
      }
    }
  }
}

Проблема:
chromedriver створює файли scoped_dir..... в папці temp -> C:\Users\user\AppData\Local\Temp і у випадку запуску тестів через Selenoid + Go Grid автоматично не видаляє їх, а через Selenium Grid автоматично видаляє. За один прогон тестів на віртуалці створюється файлів на 500-800МБ. Через це закінчується память на віртуалці.

1.Я пробував запускати Selenoid так:

..\selenoid_windows_amd64.exe -conf ...\browsers.json -disable-docker -limit 2

2.Пробував прибрати параметр , "--log-level=DEBUG" в файлі browser.json
3.Добавити driver.close() перед driver.quite()

Звичайно можна написати скріптік, який буде видаляти ці файли, але думаю, що повинно бути інще рішення, оскільки при запуску через Selenium Grid такої проблеми немає.

Є якісь ідеї?


(vania-pooh) #2

Это очень странно, но проверьте с какими флагами запускается Chromedriver в случае, когда все подчищается само. По-идее временные файлы должен подчищать chromedriver \ Chrome.


(Grosha) #3

До, chromedriver должен их удалять, но почему то не удаляет. Как буд-то ему нужно прокинуть какой то параметр.

Chrome_options i selenoid capabilities:

chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--ignore-ssl-errors')
chrome_options.add_argument('--log-level=3')
chrome_options.add_extension('chrome.crx')

capabilities = {
                    "browserName": "chrome",
                    "version": "78.0",
                    "enableLog": False,
                    "enableVNC": True,
                    "enableVideo": False,
                    "hostsEntries": domain_list
                }

(Grosha) #4

Метод driver.close() удаляет файлы, но не всегда - если в браузере открыть 2 и больше вкладок, он закрывает активную вкладку, но браузер остается висеть. Закрыть сессию браузера можно, указав время"sessionTimeout": "5s", но файлы он потом уже не удаляет.

Такие варианты не работают:

  1. Сначала driver.close(), потом driver.quite(), поскольку после driver.close() сессия драйвера тоже уже не активная. После driver.quite() запускается новая сессия браузера.
  2. Хотел оставить одну вкладку до команды driver.close() - но закрыть вкладку можно тогда, когда фокус драйвера на ней. А при закрытии вкладки с фокусом, закрывается сессия драйвера.

Это не проблема Selenoid, а проблема Selene/Selenium и возможно Python (у меня 3.6), возможно кто-то сталкивался с такой проблемой и решил?


(Сергей Кузьмин) #5

может кому понадобится - на яве правда

@AfterTest(alwaysRun = true)
	public void afterTest() {
	Collection<File> folders = new ArrayList<>();
		folders = FileUtils.listFilesAndDirs(
				new File(System.getProperty("java.io.tmpdir")),
				(IOFileFilter) new NotFileFilter(TrueFileFilter.INSTANCE),
				(IOFileFilter) DirectoryFileFilter.DIRECTORY);
		folders.stream().filter(f -> f.getName().matches("scoped_dir.*"))
				.forEach(f -> {
					try {
						System.err.println("Removing: " + f.getCanonicalPath());
						FileUtils.deleteDirectory(f);
					} catch (IOException e) {
						System.err.println("Exception (ignored): " + e.toString());
					}
				});

	}