Selenium python如何使用unittest.TestCase中的assertEqual方法&#34; <class'unittest.case.testcase'=“”>&#34; </class>中没有这样的测试方法

时间:2014-03-29 10:38:18

标签: python selenium python-unittest

我尝试在通常的类中使用assertEqual,并且不能从unittest.TestCase中调用方法

    class MyPages(unittest.TestCase):

        @classmethod
        def setUpClass(cls):
            basetest.BaseTest().open_browser('firefox')
            basetest.BaseTest().login()


        def testCreateFolder(self):
            print "111111111"

        def testCreateFolder1(self):
            print "222222222"

        @classmethod
        def tearDownClass(cls):
            basetest.BaseTest().close_browser()

在我的BaseTest中,我想用文本断言登录。

    class BaseTest():

        def open_browser(self, browser):
            self.driver = config.browser[browser]
            global driver
            driver = self.driver
            driver.get(config.url)


        def login(self):
            # Go to authorisation page
            driver.find_element_by_xpath(link.header["Login_button"]).click()
            # Get text from LOGIN label and assert it with expected text
            login_text = driver.find_element_by_xpath(link.author_popup["Login_label"])
            login_text.get_attribute("text")
            print login_text.text
            unittest.TestCase().assertEqual(1, 1, "helllllllo")
            unittest.TestCase().assertEqual(login_text.text, text.author_popup["Login"],
                                "Wrong label on log in auth popup. Expected text:")

结果我有以下内容:

    Error
    Traceback (most recent call last):
      File "D:\python\PD_Tests\pages\my_pages.py", line 17, in setUpClass
        basetest.BaseTest().login()
      File "D:\python\PD_Tests\tests\basetest.py", line 25, in login
        unittest.TestCase().assertEqual(1, 1, "helllllllo")
      File "C:\Python27\lib\unittest\case.py", line 191, in __init__
        (self.__class__, methodName))
    ValueError: no such test method in <class 'unittest.case.TestCase'>: runTest

如果我的类不是unittest.TestCase,我可以在我的方法中使用assertEqual方法吗?

2 个答案:

答案 0 :(得分:1)

我认为有办法做你想做的事,但这有点像黑客。

TestCase类的构造函数将方法名称作为参数,此参数的默认值为"runTest"。此构造函数的docstring如下所示:

  

创建将在执行时使用命名测试方法的类的实例。如果实例没有具有指定名称的方法,则引发ValueError。

希望这可以解释您所看到的错误消息。

如果要创建TestCase只是为了使用断言方法,您可以传入其他方法的名称,例如__str__。这将使您完成构造函数中的检查:

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from unittest import TestCase
>>> t = TestCase("__str__")
>>> t.assertEqual(3, 5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\unittest\case.py", line 511, in assertEqual
    assertion_func(first, second, msg=msg)
  File "C:\Python27\lib\unittest\case.py", line 504, in _baseAssertEqual
    raise self.failureException(msg)
AssertionError: 3 != 5
>>> t.assertEqual(3, 3)
>>>

只要您不尝试运行TestCase,这应该不是问题。

答案 1 :(得分:1)

来自BaseTest的{​​{1}}是否有特殊原因

我的解决方案是拥有unittest.TestCase类,该类继承自SeleniumTestcase并提供unittest.TestCasesetUp方法。只需确保在创建tearDown实例时知道config