如何查看"屏幕截图:可通过屏幕显示"?

jal*_*anb 18 selenium screenshot screen python-2.7 phantomjs

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

屏幕截图:通过屏幕提供

能够查看这样的屏幕截图会很好,但是我不知道它们在哪里被保存,也不知道程序(或其他)是什么意思screen.

(我熟悉的唯一"屏幕"是终端多路复用器,它不会显示截图)

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

Aby*_*ham 25

在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()
Run Code Online (Sandbox Code Playgroud)

这将为您提供截图,此时图像将在您的脚本工作时保存


Hie*_*ieu 7

那么 - 他们在谈论什么"屏幕"?

我的例外情况如下:

  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
Run Code Online (Sandbox Code Playgroud)

看看这一行:raise exception_class(message, screen, stacktrace)所以screen这里的意思是变量screen:

>>> screen
u'iVBORw0KGgoAAAANSUhEUgAABVYAAAMACAYAAADPPjzCAAAACXBIWXMAAAsTAAALEwEAmpwYAAAgAElE ...'
Run Code Online (Sandbox Code Playgroud)

我不知道快速显示屏幕截图的方法,但screen看起来像您可以保存到文件然后查看它的图像数据.


Kul*_*ket 5

我发现我可以使用以下(python3)获取异常返回的实际屏幕截图。

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

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