Как просмотреть "Снимок экрана: доступен через экран"?
Я начал запускать тесты Selenium через PhantomJS из Python. Всякий раз, когда тест вызывает исключение, я вижу трассировку, за которой следует загадочная фраза
Снимок экрана: доступен через экран
Было бы неплохо иметь возможность просматривать такие скриншоты, но я понятия не имею, где они сохраняются, и какая программа (или другая) предназначена для screen
.
(Единственный "экран", с которым я знаком, - терминальный мультиплексор, который не будет показывать скриншоты)
Итак - о каком "экране" они говорят? Как использовать его для просмотра скриншотов?
Ответы
Ответ 1
Запустите программу в блоке try
и когда возникает ошибка, сделайте снимок экрана с помощью save_screenshot
Например:
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()
Это даст вам скриншот в тот момент
Изображение будет сохранено при работе вашего script
Ответ 2
Итак - о каком "экране" они говорят?
Мое исключение выглядит следующим образом:
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
Посмотрите на строку: raise exception_class(message, screen, stacktrace)
, поэтому screen
здесь означает переменную screen
:
>>> screen
u'iVBORw0KGgoAAAANSUhEUgAABVYAAAMACAYAAADPPjzCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAgAElE ...'
Я не знаю, как быстро показать скриншот, но screen
выглядит как данные изображения, которые вы можете сохранить в файл, затем просмотрите его.
Ответ 3
Я обнаружил, что я могу получить фактический скриншот, возвращенный исключением (не принимая новый скриншот), используя это (python3):
try:
...
except ElementNotVisibleException as e:
with open("imageToSave.png", "wb") as fh:
fh.write(base64.decodebytes(e.screen.encode()))