Выполнение теста Selenium-Chromedriver оставляет временные файлы scoped_dir *, которые делают выполнение теста на внутреннем веб-сайте, возвращая ошибку 500 - PullRequest
0 голосов
/ 11 января 2019

У нас есть тесты автоматизации Selenium-C #, на которых запущено внутреннее веб-приложение, для которого требуется токен Outh-2 Bearer. Когда я запускаю тесты, создается набор временных файлов с именем scope_dir. Эти файлы автоматически удаляются для некоторых тестов. Но в какой-то момент во время выполнения теста они просто остаются без удаления. После этого момента я получаю 500 ошибок.

Я пробовал следующее:

Chromedriver не удаляет scoped * dir во временной папке после завершения теста

https://bugs.chromium.org/p/chromedriver/issues/detail?id=644

https://sqa.stackexchange.com/questions/26675/chromedriver-not-deleting-scoped-dir-in-temp-folder-after-test-is-complete

Не удалось прочитать HKLM \ SOFTWARE \ Policies \ Google \ Chrome \ MachineLevelUserCloudPolicyEnrollmentToken: система не может найти указанный файл. (0x2)

https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/303

Я углубился в эту папку scope_dir и обнаружил следующую ошибку:

[0111 / 171553.822: INFO: CONSOLE (21)] "BSSO Telemetry: >> {" result ":" Error "," error ":" NoExtension "," type ":" ChromeSsoTelemetry "," data ": {}, «traces»: [«BrowserSSO Initialized», «Создание поставщика ChromeBrowserCore», «Отправка сообщения для метода CreateProviderAsync», «Полученное сообщение для метода CreateProviderAsync», «Ошибка: ошибка ChromeBrowserCore NoExtension: расширение не установлено.»]} ", источник: https://aadcdn.msauth.net/ests/2.1.8438.15/content/cdnbundles/oldbssointerrupt_core.min_lg-ochofcwm0-pkfjghldq2.js (21) [0111 / 171553.878: INFO: CONSOLE (21)] "Телеметрия BSSO: {" result ":" Error "," error ":" NoExtension "," type ":" ChromeSsoTelemetry "," data ": {}," traces ": [" BrowserSSO Initialized "," Создание поставщика ChromeBrowserCore "," Отправка сообщения для метода CreateProviderAsync "," Полученное сообщение для метода CreateProviderAsync "," Ошибка: ошибка ChromeBrowserCore NoExtension: расширение не установлено. "]}", Источник: https://aadcdn.msftauth.net/ests/2.1.8438.15/content/cdnbundles/oldbssointerrupt_core.min_lg-ochofcwm0-pkfjghldq2.js (21) [0111 / 171553.897: INFO: CONSOLE (21)] "BSSO Telemetry: {" result ":" Error "," error ":" NoExtension "," type ":" ChromeSsoTelemetry "," data ": {}," traces ": [" BrowserSSO Initialized "," Создание поставщика ChromeBrowserCore "," Отправка сообщения для метода CreateProviderAsync "," Полученное сообщение для метода CreateProviderAsync "," Ошибка: ошибка ChromeBrowserCore NoExtension: расширение не установлено. "]}", [0111 / 171605.329: INFO: CONSOLE (92679)] "Не удалось найти HammerJS. Некоторые компоненты углового материала могут работать неправильно.", Источник: https://myWebsite.europe.cloudapp.azure.com/vendor.js (92679) [0111 / 171605.409: INFO: CONSOLE (636)] "Token: null", источник:

Одним из решений из приведенных выше ссылок было удаление папок scope_dir перед каждым выполнением теста, когда запускается набор тестов. Но проблема в том, что мы запускаем четыре тестовых потока параллельно. Следовательно, удаление папки scope_dir топает на работающем процессе chromedriver.exe, вызывающем проблемы.

Тесты выполняются параллельно, используя:

Google Chrome Версия 71.0.3578.98

ChromeDriver версия 2.45.6

Запуск тестов через Specflow. Первоначально наш веб-сайт размещался в службах приложений Azure, и выполнение теста было гладким. Но последние пару недель он размещается в сервисной фабрике. После этого мы столкнулись с этой проблемой (однако не уверены, что это проблема).

1 Ответ

0 голосов
/ 13 января 2019

Вы видели это правильно. При каждом запуске тестов на основе Selenium / ChromeDriver каждый раз при запуске Chrome создается scoped_dir*, что видно из следующего журнала :

[1547372435.413][INFO]: Launching chrome: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-background-networking --disable-client-side-phishing-detection --disable-default-apps --disable-extensions --disable-extensions-except="C:\Users\ATECHM~1\AppData\Local\Temp\scoped_dir4616_4705\internal" --disable-hang-monitor --disable-infobars --disable-popup-blocking --disable-prompt-on-repost --disable-sync --disable-web-resources --enable-automation --enable-logging --force-fieldtrials=SiteIsolationExtensions/Control --ignore-certificate-errors --log-level=0 --metrics-recording-only --no-first-run --password-store=basic --remote-debugging-port=0 --start-maximized --test-type=webdriver --use-mock-keychain --user-data-dir="C:\Users\ATECHM~1\AppData\Local\Temp\scoped_dir4616_1359" data:,

Этот scoped_dir* необходим для передачи стандартных / обязательных / настроенных аргументов для запуска Chrome Browser . Как пример:

"chrome": {
      "chromedriverVersion": "2.45.615291 (ec3682e3c9061c10f26ea9e5cdcf3c53f3f74387)",
      "userDataDir": "C:\\Users\\ATECHM~1\\AppData\\Local\\Temp\\scoped_dir4616_1359"
   }

Но при успешном вызове driver.quit() в конце, т.е. при clean exit , эта временная папка должна быть удалена ChromeDriver .

Согласно ChromeDriver не удаляет папки профиля и scoped_dir * после завершения теста Эта проблема была воспроизведена с ChromeDriver v2.28 и Браузер: Chrome 57.x где @ johnchen @ chromium.org упомянул:

Это похоже на состояние гонки между ChromeDriver и Chrome. ChromeDriver создает эти временные каталоги для использования Chrome, и в конце ChromeDriver пытается удалить эти каталоги. ChromeDriver ожидает завершения основного процесса Chrome, прежде чем выполнять удаление, но некоторые дочерние процессы Chrome могут по-прежнему выполняться и удерживать эти каталоги, что приводит к сбою удаления. В настоящее время ChromeDriver не повторяет удаление. Добавление некоторых попыток может быть самым простым исправлением.

Эта фиксация Chromedriver - Повторите попытку удаления временного каталога, когда это необходимо. добавлена ​​логика повторных попыток при очистке этих каталогов, если ChromeDriver не удаляет временные каталоги при выходе, что приводит к потере дискового пространства. Это исправление было частью ChromeDriver 2.30.

Если вы все еще видите scoped_dir* (в случае параллельных тестов), вы можете сохранить userDataDir из Returned Capabilities и удалите эту папку. Это очищает папку scoped_dir для этого конкретного экземпляра и помогает при выполнении параллельных тестов.

...