2016-05-27 22 views
16

Ich habe Selenium-Tests über PhantomJS von Python gestartet. Jedes Mal, wenn ein Test eine Ausnahme auslöst ich eine Rückverfolgung durch die rätselhafte PhraseWie kann ich den "Screenshot: über Bildschirm verfügbar" anzeigen?

Screenshot gefolgt sehen: erhältlich über Bildschirm

Es wäre schön zu können, solche Screenshots sehen, aber ich habe keine Ahnung, wo Sie werden gespeichert, noch, welches Programm (oder anderes) von screen beabsichtigt ist.

(Der einzige „Bildschirm“ Ich kenne ist the terminal multiplexer, die Screenshots zeigen nicht)

Also - was „Bildschirm“ reden sie? Wie kann ich die Screenshots anzeigen?

+1

Mögliches Duplikat [Automatische Screenshots, wenn Test von Selenium WebDriver in Python scheitern ] (http://stackoverflow.com/questions/12024848/automatic-screenshots-when-test-fail-by-selenium-webdriver-in-python) –

+2

Die Lösung für diese Frage ist die gleiche, aber ich denke, die Frage ist signifikant anders, da diese Frage nach der spezifischen Fehlermeldung fragt. Ein Grund, warum ich diese Frage gestellt habe, war, dass ich keine Erklärung für die Fehlermeldung finden konnte. Die Suche fand sie nur als Teil eines Fehlerprotokolls. Ich denke, diese Frage sollte für alle anderen gelten, die sich fragen, wie ich es getan habe: "Was bedeutet dieser Fehler überhaupt?" – jalanb

Antwort

23

Führen Sie das Programm in einem try-Block und wenn der Fehler nehmen auftreten Sie den Screenshot mit save_screenshot

ZB:

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

Dies gibt Ihnen den Screenshot in diesem Moment Bild gespeichert wird bei die Arbeit Ihres Skripts

+1

Interessanter Ansatz bei der Ausnahmebehandlung. Als Randnotiz können Sie auch einen Screenshot mit 'driver.get_screenshot_as_file ('screenshot.png')' machen –

5

Also - was "Bildschirm" sprechen sie?

Meine Ausnahme sieht wie folgt aus:

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 

Werfen Sie einen Blick auf die Zeile: raise exception_class(message, screen, stacktrace), so dass die screen hier bedeutet die Variable screen:

>>> screen 
u'iVBORw0KGgoAAAANSUhEUgAABVYAAAMACAYAAADPPjzCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAgAElE ...' 

Ich weiß nicht ein schnelle Möglichkeit, den Screenshot zu zeigen, aber screen sieht aus wie die Bilddaten, die Sie in einer Datei speichern können, dann sehen Sie es.

4

fand ich, dass ich die tatsächliche Screenshot von der Ausnahme zurückgegeben bekommen kann mit diesem (python3) (kein neuen Screenshot nehmen):

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