web-dev-qa-db-fra.com

Comment visualiser la "Capture d'écran: disponible via l'écran"?

J'ai commencé à exécuter des tests Selenium via PhantomJS à partir de Python. Chaque fois qu'un test lève une exception, je vois un retraçage suivi de la phrase énigmatique

Capture d'écran: disponible via l'écran

Ce serait bien de pouvoir voir de telles captures d'écran, mais je n'ai aucune idée où elles sont enregistrées, ni quel programme (ou autre) est destiné par screen.

(Le seul "écran" que je connaisse est le terminal multiplexeur , qui n'affichera pas les captures d'écran)

Alors - de quel "écran" parlent-ils? Comment l'utiliser pour voir les captures d'écran?

18
jalanb

Exécutez le programme dans un bloc d'essai et lorsque l'erreur se produit, prenez la capture d'écran à l'aide de save_screenshot

Par exemple :

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

Cela vous donnera la capture d'écran à ce moment-là. L'image sera enregistrée lors du fonctionnement de votre script

25
Aby Abraham

Alors - de quel "écran" parlent-ils?

Mon exception ressemble à ceci:

  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

Jetez un oeil à la ligne: raise exception_class(message, screen, stacktrace), donc le screen signifie ici la variable screen:

>>> screen
u'iVBORw0KGgoAAAANSUhEUgAABVYAAAMACAYAAADPPjzCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAgAElE ...'

Je ne connais pas un moyen rapide d'afficher la capture d'écran, mais screen ressemble aux données d'image que vous pouvez enregistrer dans un fichier puis l'afficher.

7
Hieu

J'ai trouvé que je peux obtenir la capture d'écran réelle retournée par l'exception en utilisant ce qui suit (python3).

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

La fonction driver.save_screenshot () crée une nouvelle capture d'écran plus tard que lorsque l'exception s'est produite.

4
KuleRucket