web-dev-qa-db-ja.com

「スクリーンショット:画面から利用可能」を表示するにはどうすればよいですか?

PythonからPhantomJSを介してSeleniumテストの実行を開始しました。テストで例外が発生するたびに、トレースバックに続いて謎めいたフレーズが表示されます

スクリーンショット:画面から利用可能

このようなスクリーンショットを表示できればいいのですが、どこに保存されているのか、どのプログラム(またはその他)がscreenによって意図されているのかわかりません。

(私が知っている唯一の「画面」は ターミナルマルチプレクサ であり、スクリーンショットは表示されません)

それで、彼らは何の「スクリーン」について話しているのですか?それを使用してスクリーンショットを表示するにはどうすればよいですか?

18
jalanb

プログラムを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()

これにより、スクリプトの実行時に画像が保存されるその瞬間のスクリーンショットが表示されます

25
Aby Abraham

それで、彼らは何の「スクリーン」について話しているのですか?

私の例外は次のようになります:

_  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は、ファイルに保存して表示できる画像データのように見えます。

7
Hieu

以下を使用して、例外によって返された実際のスクリーンショットを取得できることがわかりました(python3)。

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

Driver.save_screenshot()関数は、例外が発生した後の時間に新しいスクリーンショットを作成します。

4
KuleRucket