2016-06-28 22 views
5

Próbuję wykonać automatyczny test dla mojej strony i używam Jasmine w połączeniu z selenem.Błąd Chromdriver2.21.2 "brak takiej sesji"

Podczas testowania na chrome (przy użyciu chromedriver) otrzymuję, nieprzewidywalnie, błąd poniżej. Zdarza się to na tyle często, że po uruchomieniu pakietu testowego prawie nigdy się nie kończy.

Znalazlem dowód tego błędu, ale nie mogę znaleźć solidną odpowiedź: https://bugs.chromium.org/p/chromedriver/issues/detail?id=732 (przyznawana była za chromu i używam Chrome)

WebDriverError: no such session 
    (Driver info: chromedriver=2.21.371459 (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),platform=Mac OS X 10.11.5 x86_64) 
    at WebDriverError (/Users/XXXXXXX/Documents/sweetmeeting/node_modules/selenium-webdriver/lib/error.js:27:10) 
    at Object.checkLegacyResponse (/Users/XXXXXXX/Documents/sweetmeeting/node_modules/selenium-webdriver/lib/error.js:639:15) 
    at parseHttpResponse (/Users/XXXXXXX/Documents/sweetmeeting/node_modules/selenium-webdriver/http/index.js:538:13) 
    at /Users/XXXXXXX/Documents/sweetmeeting/node_modules/selenium-webdriver/http/index.js:472:11 
    at ManagedPromise.invokeCallback_ (/Users/XXXXXXX/Documents/sweetmeeting/node_modules/selenium-webdriver/lib/promise.js:1379:14) 
    at TaskQueue.execute_ (/Users/XXXXXXX/Documents/sweetmeeting/node_modules/selenium-webdriver/lib/promise.js:2913:14) 
    at TaskQueue.executeNext_ (/Users/XXXXXXX/Documents/sweetmeeting/node_modules/selenium-webdriver/lib/promise.js:2896:21) 
    at /Users/XXXXXXX/Documents/sweetmeeting/node_modules/selenium-webdriver/lib/promise.js:2820:25 
    at /Users/XXXXXXX/Documents/sweetmeeting/node_modules/selenium-webdriver/lib/promise.js:639:7 
    at process._tickCallback (node.js:369:9) 
From: Task: WebElement.isDisplayed() 
    at Driver.schedule (/Users/XXXXXXX/Documents/sweetmeeting/node_modules/selenium-webdriver/lib/webdriver.js:377:17) 
    at WebElement.schedule_ (/Users/XXXXXXX/Documents/sweetmeeting/node_modules/selenium-webdriver/lib/webdriver.js:1744:25) 
    at WebElement.isDisplayed (/Users/XXXXXXX/Documents/sweetmeeting/node_modules/selenium-webdriver/lib/webdriver.js:2110:17) 
    at driver.findElements.then.error (/Users/XXXXXXX/Documents/sweetmeeting/Test/front_end_testing/spec/dashboard_tester.js:251:34) 
    at ManagedPromise.invokeCallback_ (/Users/XXXXXXX/Documents/sweetmeeting/node_modules/selenium-webdriver/lib/promise.js:1379:14) 
    at TaskQueue.execute_ (/Users/XXXXXXX/Documents/sweetmeeting/node_modules/selenium-webdriver/lib/promise.js:2913:14) 
    at TaskQueue.executeNext_ (/Users/XXXXXXX/Documents/sweetmeeting/node_modules/selenium-webdriver/lib/promise.js:2896:21) 
    at /Users/XXXXXXX/Documents/sweetmeeting/node_modules/selenium-webdriver/lib/promise.js:2775:27 
    at /Users/XXXXXXX/Documents/sweetmeeting/node_modules/selenium-webdriver/lib/promise.js:639:7 
    at process._tickCallback (node.js:369:9) 
+0

Spróbuj użyć najnowszego [ChromeDriver 2.22] (http://chromedriver.storage.googleapis.com/index.html?path=2.22/) – Madhan

Odpowiedz

8

Mamy również zmaga się z tym problemem przez długi czas teraz i ostatnio rozwiązany, więc pomyślałem, że bym to opublikował, to pomoże komuś innemu.

Okazuje się, że było to związane z pamięcią. Testy przeprowadzamy wewnątrz kontenera dokera, a domyślny rozmiar modułu dev/shm wynosi 64 MB. Zwiększenie tego problemu rozwiązało problem "nie ma takiej sesji".

Używamy funkcji dokowania, więc dodaliśmy shm_size: 256M do pliku docker-compose.yml.

+3

Masz ten sam problem, zwiększając współczynnik shm nawet dla 2 GB! nie pomogło mi, i wydaje się, że błąd nie spowodowany rozmiarem shm. – ShockwaveNN

+0

Czy możesz wyjaśnić, w jaki sposób jest on powiązany z limitem pamięci? Czy to możliwe, że sterownik uległ awarii z powodu braku pamięci, a następnie wiązanie Selenium nie mogło się z nim komunikować? –

5

Niedawno spotkałem się również z tym wyjątkiem. Po raz pierwszy wydawało się to również nieokreślone, ale po dokładnym zbadaniu zdałem sobie sprawę, że dzieje się to deterministycznie, jeśli wywołasz ChromeDriver.Close(), a następnie spróbuję FindElement.

W moim przypadku funkcja ChromeDriver.Close() została wywołana w procedurze obsługi wyjątku testu poprzedniej wersji, co miało miejsce z powodu problemu z synchronizacją. Wpłynęło to tylko na test następny, więc dodało to uczucia, że ​​ten problem jest niestabilny. Ale jak już powiedziałem, moje śledztwo ujawniło, że jest deterministyczne.

Powiedziawszy to, mam doświadczenie z tym błędem. Możliwe, że Twój przypadek jest inny ...