2016-05-27 17 views
16

Ho iniziato a eseguire test selenio tramite PhantomJS da Python. Ogni volta che un test solleva un'eccezione vedo un traceback seguita dalla frase enigmaticaCome visualizzare "Screenshot: disponibile tramite schermo"?

Screenshot: disponibile tramite schermo

sarebbe bello essere in grado di visualizzare tali screenshot, ma non ho idea di dove vengono salvati, né quale programma (o altro) è inteso da screen.

(Lo "schermo" solo io conosco è the terminal multiplexer, che non mostrerà le immagini)

Così - che cosa "schermo" stanno parlando? Come lo uso per visualizzare gli screenshot?

+1

Eventuali duplicati di [screenshot automatici quando prova cedere per Selenio WebDriver in Python ] (http://stackoverflow.com/questions/12024848/automatic-screenshots-when-test-fail-by-selenium-webdriver-in-python) –

+2

La soluzione a questa domanda è la stessa, ma penso che la domanda sia significativamente diverso in quanto questa domanda è chiedere il messaggio di errore specifico. Una delle ragioni per cui ho posto questa domanda è stata che ho trovato impossibile trovare una spiegazione del messaggio di errore, tutte le ricerche lo hanno appena trovato come parte di un log degli errori. Penso che questa domanda dovrebbe essere mantenuta per chiunque altro si trovi a chiedere, come ho fatto io, "che cosa significa quell'errore anche ???" – jalanb

risposta

23

Eseguire il programma in un blocco try e quando l'errore si verifica prendere screenshot utilizzando save_screenshot

Esempio:

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() 

Questo vi darà la schermata in quel momento immagine verrà salvata in il funzionamento del tuo script

+1

Approccio interessante con la gestione delle eccezioni. Come nota a margine puoi anche prendere uno screenshot con 'driver.get_screenshot_as_file ('screenshot.png')' –

5

Quindi - di che "schermo" stanno parlando?

La mia eccezione si presenta così:

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 

Date un'occhiata alla linea: raise exception_class(message, screen, stacktrace), in modo che il screen qui significa che la variabile screen:

>>> screen 
u'iVBORw0KGgoAAAANSUhEUgAABVYAAAMACAYAAADPPjzCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAgAElE ...' 

non so un modo rapido per mostrare lo screenshot, ma screen sembra come i dati dell'immagine che è possibile salvare in un file e quindi visualizzarlo.

4

ho trovato che posso ottenere lo screenshot effettivo restituito dal eccezione (non prendere un nuovo screenshot) utilizzando questo (python3):

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