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?
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
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.
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.