2016-05-27 12 views
16

Uruchomiłem testy Selenium za pośrednictwem PhantomJS z Pythona. Ilekroć test podnosi wyjątek widzę traceback po której następuje enigmatycznym zwrotemJak wyświetlić "Zrzut ekranu: dostępny przez ekran"?

Zrzut ekranu: dostępne za pośrednictwem ekranu

Byłoby miło, aby móc zobaczyć te zdjęcia, ale nie mam pojęcia, gdzie są zapisywane, ani jaki program (lub inny) jest zamierzony przez screen.

(„screen” tylko znam to the terminal multiplexer, który nie pokaże zdjęcia)

Więc - co „screen” oni mówią? Jak mogę go użyć do przeglądania zrzutów ekranu?

+1

Możliwy duplikat [Automatic screeny gdy próba nie powiedzie się, selen Webdriver w Pythonie ] (http://stackoverflow.com/questions/12024848/automatic-screenshots-when-test-fail-by-selenium-webdriver-in-python) –

+2

Rozwiązanie tego pytania jest takie samo, ale myślę, że pytanie jest znacznie różni się tym, że pytanie to dotyczy konkretnego komunikatu o błędzie. Jednym z powodów, dla których zadałem to pytanie, było to, że nie znalazłem żadnego wyjaśnienia komunikatu o błędzie, wszystkie wyszukiwania znalazły go jako część dziennika błędów. Myślę, że to pytanie powinno zostać zachowane dla każdego, kto zadaje sobie pytanie, tak jak ja, "co ten błąd oznacza?" – jalanb

Odpowiedz

23

Uruchom program w bloku try i gdy błąd występuje podjąć zrzut ekranu save_screenshot

Np

driver = webdriver.PhantomJS() 
driver.set_window_size(1920,1080) 
try: 
    driver.get('http://whatsmyuseragent.com/') 

except Exception,e: 
    driver.save_screenshot('screenshot.png') 

driver.close() 

To daje zrzut ekranu w tym momencie obraz zostanie zapisany w działanie twojego skryptu

+1

Interesujące podejście z obsługą wyjątków. Na marginesie możesz też zrobić zrzut ekranu z 'driver.get_screenshot_as_file ('screenshot.png') –

5

O czym więc mówi "ekran"?

Moja wyjątek wygląda następująco:

File "/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 192, in check_response 
    raise exception_class(message, screen, stacktrace) 
WebDriverException: Message: {"errorMessage":"Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: \"script-src 'self' connect.facebook.net cdn.ravenjs.com www.google-analytics.com banhang.shopee.vn chat.shopee.vn cdn.shopee.vn\".\n","request":{"objectName":"","statusCode":200,"headers":{"Cache":"no-cache","Content-Type":"application/json;charset=UTF-8"}}} 
Screenshot: available via screen 

Spójrz na linii: raise exception_class(message, screen, stacktrace), więc screen oznacza tutaj zmienna screen:

>>> screen 
u'iVBORw0KGgoAAAANSUhEUgAABVYAAAMACAYAAADPPjzCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAgAElE ...' 

I nie wiedzieć Szybki sposób wyświetlenia zrzutu ekranu, ale screen wygląda jak dane obrazu, które można zapisać w pliku, a następnie wyświetlić.

4

odkryłem, że mogę uzyskać rzeczywiste screenshot zwrócony przez wyjątku (nie biorąc nowy zrzut ekranu) za pomocą tego (python3):

try: 
    ... 
except ElementNotVisibleException as e: 
    with open("imageToSave.png", "wb") as fh: 
     fh.write(base64.decodebytes(e.screen.encode()))