Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 属性错误:';列表';对象没有属性'_getAssertEqualityFunc';当尝试在assertEquals周围制作包装时_Python_Selenium_Assert - Fatal编程技术网

Python 属性错误:';列表';对象没有属性'_getAssertEqualityFunc';当尝试在assertEquals周围制作包装时

Python 属性错误:';列表';对象没有属性'_getAssertEqualityFunc';当尝试在assertEquals周围制作包装时,python,selenium,assert,Python,Selenium,Assert,我试图围绕assertEquals(下面的代码)创建一个包装器方法。运行测试时,我收到以下错误:“AttributeError:'list'对象没有属性'\u getAssertEqualityFunc'” 我已经尝试过直接使用assertEquals,它可以工作,但是当assert失败时,我需要做更多的事情 from unittest import TestCase as a class Asserts: _assert_list = [] @property

我试图围绕assertEquals(下面的代码)创建一个包装器方法。运行测试时,我收到以下错误:“AttributeError:'list'对象没有属性'\u getAssertEqualityFunc'”

我已经尝试过直接使用assertEquals,它可以工作,但是当assert失败时,我需要做更多的事情

from unittest import TestCase as a


class Asserts:

    _assert_list = []

    @property
    def assert_list(self):
       return self._assert_list

    def equals(self, first, second, msg=None):
        """Fail if the two objects are unequal as determined by the '=='
           operator.
        """
        try:
            A.assertEquals(first, second, msg)

        except AssertionError:
            self._assert_list.append(AssertionError.__cause__)
编辑:稍微更改了代码。 我想使用这一点,当执行多个测试不停在中间运行,如果有东西在途中失败。就像所有这些断言一样,如果一个测试失败,它会将原因附加到列表中,并在结束时断言列表是否为空

回溯:
回溯(最近一次呼叫最后一次):
测试_tc_01中第88行的文件“路径” self.a.等于(self.li,self.li2)
文件“路径”,第21行,等号 a、 assertEquals(第一、第二、msg)
文件“路径,第1321行,在不推荐的函数中 返回原始函数(*args,**kwargs)
assertEqual中的文件“路径”,第828行 断言\u func=self.\u getAssertEqualityFunc(第一,第二) AttributeError:“list”对象没有属性“\u getAssertEqualityFunc”

编辑2:我在一个测试中有多个断言。例如,如果第一个失败,则跳过其余的断言。这就是为什么我想在我的框架中实现它

编辑3:应要求,在此处进行测试

def setUp(self):
    self.driver = WebDriver(browser='chrome').browser
    self.driver.get(self.RLO_URL)
    self.driver.maximize_window()
    self.wait = WebDriverWait(self.driver, 10)
    self.driver.implicitly_wait(10)
    self.a = Asserts()

    login_page = LoginPage(self.driver)
    login_page.log_in()

def test_tc_01(self):
    self.maxDiff = None
    nav_page = NavBarPage(self.driver)
    nav_page.go_to_start_new_process()

    start_new_process_page = StartNewProcessPage(self.driver)
    start_new_process_page.start()

    process_page = ProcessPage(self.driver)
    app_info = process_page.application_info
    import pdb; pdb.set_trace()

    # self.assertEquals(app_info.get_country_list(), self.EXPECTED_COUNTRIES)
    self.assertEquals(app_info.get_channel_list(), self.EXPECTED_CHANNELS)
    self.assertEquals(app_info.get_marketing_source_list(), self.EXPECTED_MARKETING_SOURCE)
    self.assertEquals(app_info.get_marketing_agreement_list(), self.EXPECTED_MARKETING_AGREEMENT)
    self.assertEquals(app_info.get_office_credit_list(), self.EXPECTED_OFFICE_CREDIT)

def tearDown(self):
    self.driver.quit()

我从UNITTEST文档中获取了一个例子,并在中间添加了一个失败的测试(断言false是真的,只是为了显示这一点)。 运行此命令时,您将获得以下输出:

======================================================================
FAIL: test_fail (__main__.TestStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/refael.cohen/PycharmProjects/tools & trials/unittest_suite.py", line 13, in test_fail
    self.assertTrue(False)
AssertionError: False is not true

----------------------------------------------------------------------
Ran 4 tests in 0.001s

FAILED (failures=1)
请注意,即使套件失败,所有测试都会运行


另外,您可以使用
@unittest.expectedFailure
decorator来期望测试失败,然后整个套件都会通过

这并不是编写Python的方式。该属性的目的是什么?为什么要使用双下划线前缀?为什么要定义一个setter而不是仅仅附加到列表中?但更重要的是,您需要显示一些关于你如何使用这一点和完整的回溯,有很多。谢谢。我对这一点非常陌生,并且还在不断学习。我已经编辑了这个问题。请参阅代码块下面添加的文本。我认为你最好告诉我们你正试图完成什么,可能有一个更好的方法来完成这一点,而不是自己编写断言。刚刚看到你做了wri如果您遵循unittest格式,一次失败的测试不会使整个套件失败。您的所有good@Rafi,是的,但一个测试用例有5个验证点,对于该测试用例,我创建了一个类,它有一个方法test_tc_01,它有5个断言。每个验证点一个。如果第一个断言失败,则其余的断言将被跳过是的,但我必须验证一个页面中的多个元素。如果我定义了多个测试,这意味着我必须为每个元素执行登录,并且有很多元素……如果您尝试查找一个元素,但它不在那里,则驱动程序将失败,这意味着您无法继续。您可以使用find_元素查找我方法不使用find_元素,如果找不到元素,它会返回一个空列表,然后只检查该列表是否为空,这样就找不到元素。正如我在前面的评论中所说,如果没有驱动程序,你就无法继续与页面交互。我想你应该尝试使用selenium方法,如果找不到元素,就不会失败nts,如
是否显示
是否可单击
查找元素
我必须验证多个下拉列表的内容,以及页面中多个部分的名称…好的,那么问题出在哪里?只需将元素列表存储在变量中,如果其为空,则存储一个布尔标志,表明此特定元素为未找到。对所有元素执行此操作,然后根据这些布尔标志打印/log/fail。
======================================================================
FAIL: test_fail (__main__.TestStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/refael.cohen/PycharmProjects/tools & trials/unittest_suite.py", line 13, in test_fail
    self.assertTrue(False)
AssertionError: False is not true

----------------------------------------------------------------------
Ran 4 tests in 0.001s

FAILED (failures=1)