如何查看“屏幕截图:可通过屏幕获取”?

Posted

技术标签:

【中文标题】如何查看“屏幕截图:可通过屏幕获取”?【英文标题】:How do I view the "Screenshot: available via screen"? 【发布时间】:2016-09-25 15:01:17 【问题描述】:

我已经开始通过 Python 中的 PhantomJS 运行 Selenium 测试。每当测试引发异常时,我都会看到回溯,然后是神秘的短语

屏幕截图:可通过屏幕查看

能够查看这样的屏幕截图会很好,但我不知道它们保存在哪里,也不知道screen 打算使用什么程序(或其他程序)。

(我熟悉的唯一“屏幕”是the terminal multiplexer,不会显示截图)

那么 - 他们在谈论什么“屏幕”?如何使用它来查看屏幕截图?

【问题讨论】:

Automatic screenshots when test fail by Selenium Webdriver in Python的可能重复 该问题的解决方案是相同的,但我认为这个问题有很大不同,因为这个问题是询问具体的错误信息。我问这个问题的一个原因是我发现无法找到错误消息的任何解释,所有搜索都只是发现它是错误日志的一部分。我认为这个问题应该留给那些发现自己像我一样问“这个错误是什么意思???”的人。 【参考方案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()

这将为您提供那一刻的屏幕截图 图片将在您的脚本运行时保存

【讨论】:

异常处理的有趣方法。作为旁注,您还可以使用driver.get_screenshot_as_file('screenshot.png') 截屏【参考方案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()))

driver.save_screenshot() 函数在异常发生之后的时间创建一个新的屏幕截图。

【讨论】:

以上是关于如何查看“屏幕截图:可通过屏幕获取”?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中从 MTKView 制作屏幕截图?

JavaFX - 如何创建(不可见)WebView 的快照/屏幕截图

如何在 selenium 中截取屏幕截图并粘贴为 HTML 页面?

如何在 Android 上以编程方式截取屏幕截图? [复制]

xBIM 查看器:从画布创建屏幕截图

使用 java 使用 selenium webdriver 查看页面源的屏幕截图 [重复]