python测试用例图_如何捕获有关Python单元测试的测试用例失败的屏幕截图

I am using Python 3.6.5 with the following libraries:

Appium-Python-Client==0.26

unittest2==1.1.0

selenium==3.5.0

pytest==3.6.3

Now I need to capture the screenshot in case of test failure, So intentionally I did put a false statement

self.driver.find_element_by_css_selector('test') .

I am using sys.exc_info(). But when I executing below code using a command: py.test untitled.py or python3 -m unittest untitled.py it does not capturing it.

Code:

import sys, time, unittest2

from selenium import webdriver

class FB360(unittest2.TestCase):

def setUp(self):

self.driver = webdriver.Chrome()

def test_user_can_login(self):

self.driver.get('https://www.google.co.in')

self.driver.find_element_by_css_selector('test')

def tearDown(self):

print(sys.exc_info())

if sys.exc_info()[0]:

test_method_name = self._testMethodName

self.driver.save_screenshot(test_method_name + str(time.time()) + '.png')

self.driver.quit()

if __name__ == '__main__':

unittest2.main()

O/P:

(None, None, None)

E

======================================================================

ERROR: test_user_can_login (untitled.FB360)

Traceback (most recent call last):

File "/Volumes/Harry/Projects/pythonScreenshots/untitled.py", line 11, in test_user_can_login

self.driver.find_element_by_css_selector('test')

File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 498, in find_element_by_css_selector

return self.find_element(by=By.CSS_SELECTOR, value=css_selector)

File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 832, in find_element

'value': value})['value']

File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 297, in execute

self.error_handler.check_response(response)

File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response

raise exception_class(message, screen, stacktrace)

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"test"}

(Session info: chrome=67.0.3396.99)

(Driver info: chromedriver=2.40.565386 (45a059dc425e08165f9a10324bd1380cc13ca363),platform=Mac OS X 10.13.5 x86_64)

My Foundings:

print(sys.exc_info()) prints: (None, None, None). That means my test case is passed even if I am receiving below exception:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"test"}

As sys.exc_info()) returns (None, None, None) execution won't done under if condition

So my major concern is why sys.exc_info()) returns (None, None, None) even if I am receiving NoSuchElementException ?

解决方案

I use this to take screenshots of failed tests

@pytest.fixture()

def browser(request):

options = Options()

options.add_argument("--headless") # Runs Chrome in headless mode.

_chrome = webdriver.Chrome(options=options)

failed_before = request.session.testsfailed

yield _chrome

if request.session.testsfailed != failed_before:

test_name = request.node.name

take_screenshot(_chrome, test_name)

_chrome.close()

def take_screenshot(browser, test_name):

screenshots_dir = "path_to/functional_tests/failure_screenshots"

screenshot_file_path = "{}/{}.png".format(screenshots_dir, test_name)

browser.save_screenshot(

screenshot_file_path

)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值