PythonからPhantomJSを介してSeleniumテストの実行を開始しました。テストで例外が発生するたびに、トレースバックに続いて謎めいたフレーズが表示されます
スクリーンショット:画面から利用可能
このようなスクリーンショットを表示できればいいのですが、どこに保存されているのか、どのプログラム(またはその他)がscreen
によって意図されているのかわかりません。
(私が知っている唯一の「画面」は ターミナルマルチプレクサ であり、スクリーンショットは表示されません)
それで、彼らは何の「スクリーン」について話しているのですか?それを使用してスクリーンショットを表示するにはどうすればよいですか?
プログラムを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()
これにより、スクリプトの実行時に画像が保存されるその瞬間のスクリーンショットが表示されます
それで、彼らは何の「スクリーン」について話しているのですか?
私の例外は次のようになります:
_ 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
は、ファイルに保存して表示できる画像データのように見えます。
以下を使用して、例外によって返された実際のスクリーンショットを取得できることがわかりました(python3)。
try:
...
except ElementNotVisibleException as e:
with open("imageToSave.png", "wb") as fh:
fh.write(base64.decodebytes(e.screen.encode()))
Driver.save_screenshot()関数は、例外が発生した後の時間に新しいスクリーンショットを作成します。