d1m*_*kov 25 python selenium screenshot webdriver
如果我的webdriver测试失败(任何异常或断言错误),我想自动捕获屏幕截图.我正在使用Python unittest和Selenium Webdriver.有没有人有这个问题的解决方案?
Cor*_*erg 26
在Firefox中做一些webdriver的东西......在日期图像文件的任何异常上保存截图:
from datetime import datetime
from selenium import webdriver
browser = webdriver.Firefox()
try:
# do some webdriver stuff here
except Exception as e:
print e
now = datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
browser.get_screenshot_as_file('screenshot-%s.png' % now)
Run Code Online (Sandbox Code Playgroud)
小智 11
另一种方法是将以下内容添加到您的tearDown
方法中:
if sys.exc_info()[0]:
test_method_name = self._testMethodName
self.driver.save_screenshot("Screenshots/%s.png" % test_method_name)
Run Code Online (Sandbox Code Playgroud)
这将假设一个像这样的测试类:
class SeleniumTest(unittest2.TestCase):
...
def tearDown(self):
if sys.exc_info()[0]:
test_method_name = self._testMethodName
self.driver.save_screenshot("Screenshots/%s.png" % test_method_name)
super(SeleniumTest, self).tearDown()
def test_1(self):
...
def test_2(self):
...
Run Code Online (Sandbox Code Playgroud)
对于未来参考/人们,这里是一个适用于 Python3 的解决方案,它适用于异常和失败的断言。
#!/usr/bin/env python
"""
An Example code to show the set-up with screen-shot on exception.
"""
import unittest
from selenium import webdriver
class TestDemo(unittest.TestCase):
"""An Example test Case, to show off the set-up of a screen-shot on exception."""
def setUp(self):
"""Set up the Firefox Browser and the Tear Down."""
self.driver = webdriver.Firefox()
self.driver.delete_all_cookies()
# NOTE: In addCleanup, the first in, is executed last.
self.addCleanup(self.driver.quit)
self.addCleanup(self.screen_shot)
self.driver.implicitly_wait(5)
def screen_shot(self):
"""Take a Screen-shot of the drive homepage, when it Failed."""
for method, error in self._outcome.errors:
if error:
self.driver.get_screenshot_as_file("screenshot" + self.id() + ".png")
def test_demo(self):
"""A test case that fails because of missing element."""
self.driver.get("http://www.google.com")
self.driver.find_element_by_css_selector("div.that-does-not-exist")
def test_demo2(self):
"""A test case that fails because assert."""
self.driver.get("https://stackoverflow.com")
self.assertEqual(True, False)
if __name__ == '__main__':
unittest.main(verbosity=2)
Run Code Online (Sandbox Code Playgroud)
这
self._outcome.errors
仅适用于 Python3,因此对于 Python2 使用
self._outcomeForDoCleanups.errors
反而。
对于那些只想要一个关于异常的屏幕截图的人。你应该看看这个链接:http : //blog.likewise.org/2015/01/automatically-capture-browser-screenshots-after-failed-python-ghostdriver-tests/
这是一个使用装饰器的解决方案,该装饰器包装类上的每个方法,该类以test_
包装器开头,如果该方法引发异常,该包装器会截取屏幕截图。browser_attr
用于告诉装饰器如何获取网络浏览器(驱动程序)。
from functools import partialmethod
def sreenshotOnFail(browser_attr='browser'):
def decorator(cls):
def with_screen_shot(self, fn, *args, **kwargs):
"""Take a Screen-shot of the drive page, when a function fails."""
try:
return fn(self, *args, **kwargs)
except Exception:
# This will only be reached if the test fails
browser = getattr(self, browser_attr)
filename = 'screenshot-%s.png' % fn.__name__
browser.get_screenshot_as_file(filename)
print('Screenshot saved as %s' % filename)
raise
for attr, fn in cls.__dict__.items():
if attr[:5] == 'test_' and callable(fn):
setattr(cls, attr, partialmethod(with_screen_shot, fn))
return cls
return decorator
@sreenshotOnFail()
class TestDemo(unittest.TestCase):
def setUp(self):
"""Set up the Firefox Browser and the Tear Down."""
self.browser = webdriver.Firefox()
def test_demo2(self):
"""A test case that fails because assert."""
self.driver.get("https://stackoverflow.com")
self.assertEqual(True, False)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15645 次 |
最近记录: |