2017-04-19 41 views
0

对点击下拉菜单进行简单测试并查看是否显示菜单。django-selenium TypeError:'str'对象不可调用

dropdown_user = self.browser.find_element_by_id('dropdown-user') 
    dropdown_user.click() 
    expanded = dropdown_user.get_attribute("aria-expanded") 
    self.assertTrue= (expanded) 
    settings = self.browser.find_element_by_id('dropdown-user-settings') 
    self.assertTrue(settings.is_displayed()) 

当我运行测试时给了我这个错误。我不知道为什么设置是一个str。

self.assertTrue(settings.is_displayed()) 
    TypeError: 'str' object is not callable 
+0

看来在这种特定情况下,'settings.is_displayed'是一个字符串而不是方法。你可以通过输入'type(settings.is_displayed)'的结果来验证。 –

+0

感谢您的回复。 打印它实际​​上给了我: ?!?! – phamj88

回答

2

我不能评论(没有足够的代表),或者我会 - 你能张贴整个堆栈跟踪?该行self.assertTrue= (expanded)看起来可能会导致问题。

编辑:我想你分配变量expandedself.assertTrue的值,然后当你试图调用self.assertTrue你试图调用一个字符串,而不是一个函数。删除行self.assertTrue=(expanded)并用self.assertEqual(expanded, 'true')替换它。根据要求

编辑2以更深入解释:

expanded的值是一个字符串 - 可能“真”,如果你的下拉菜单扩展。

书写self.assertTrue=(expanded)与写作self.assertTrue=expanded是一样的(在这种情况下)。您将变量expanded(它是一个字符串)的值赋给变量self.assertEqual - 它不再是一个函数,它是一个字符串!

self.assertTrue(True) # fine 
self.assertTrue=('Woops!') # the value of self.assertTrue is now the 
          # string 'Whoops!' 
print(self.assertTrue) 
>'Woops!' 
self.assertTrue(True) # you're trying to call a string here 
> TypeError: 'str' object is not callable 

在Python中,没有什么可以指派任何类型的任何变量阻止你,因为它是dynamically typed

+0

嗨,感谢您的回复。 我认为这是整个堆栈跟踪。 不确定pytest是否隐藏了其他内容。 但是,整个输出只是我的代码,底部有这个错误 – phamj88

+0

尝试删除“self.assertTrue =(expanded)”行并重新运行 - 您将'assertTrue'函数赋值为该行的扩展值,使它成为一个字符串而不是一个函数,导致你的错误。 – FraserES

+0

很好找! 评论'self.assertTrue =(扩展)'作品 虽然我有点困惑。 这是否与在一次测试中使用self.assertTrue两次相关的问题? 既然我想有两个测试是不可能的? – phamj88