2016-05-10 128 views
1

我是新来的蟒蛇,硒。我在执行过程中遇到以下错误。我已经使用Python 3.5.0缺少1个必需的posional参数

如何在这个问题中使用参数? 有没有其他方法?

错误:

C:\>python test.py 
Enter your username: dg 
Enter your password: bn 
Address: rty 
Traceback (most recent call last): 
File "test.py", line 5, in <module> 
class TryTestCase(unittest.TestCase): 
File "test.py", line 24, in TryTestCase 
test_something(username, password, target) 
TypeError: test_something() missing 1 required positional argument: 'target' 

代码:

import unittest 
from selenium import webdriver 


class TryTestCase(unittest.TestCase): 
    username = input('Enter your username: ') 
    password = input('Enter your password: ') 
    target = input('Address: ') 

    def setUpClass(self): 
     self.driver = webdriver.Firefox() 
     self.driver.get('https://abcd.com/') 
     self.driver.implicitly_wait(5) 

    def test_something(self, username, password, target): 
     self.driver.find_element_by_xpath("xyz").send_keys(username) 
     self.driver.find_element_by_xpath("xyz").send_keys(password) 
     self.driver.find_element_by_xpath("xyz").send_keys(target) 
     self.driver.implicitly_wait(1) 

    def tearDownClass(self): 
     self.driver.close() 

    test_something(username, password, target) 


if __name__ == '__main__': 
    unittest.main() 
+0

您不必单独运行测试方法。测试运动员将为您做到这一点。只需运行Python文件。 –

+0

显然,你尝试调用你的方法(出于某种原因在你的类定义中,为什么?!)'test_something()'包含4个参数,只有3个参数。尝试删除此方法调用 - 'unittest'应该自己调用它 – Andersson

+0

Thnx @Andersson – kaniska

回答

2

在Python类的参数与这个类的范围通过。这是你在所有方法中拥有的自我参数。 因为这些方法在一个类中,所以不能直接调用它们(除非它们是静态的)。如果你想给他们打电话,你必须先创建你的班级的一个实例。之后,您可以通过此实例调用该方法,并且自动为您自动传递参数。

由于其他人已经对您的问题发表了评论,因此您不需要自己调用此方法,因为unittest会为您执行此操作。这并不意味着知道你为什么会遇到这个错误并不重要。因此,我将给你一些基本的例子。

class Boat: 
    def sail(self, distance): 
     print("I am sailing for {0} meters").format(distance) 

    sail(5) 

这个例子会给你你所得到的错误。这是因为你没有通过你的类的实例调用方法(除非调用是从另一个方法进行的,否则你不能从类内部调用方法)。

如果您从该类中的其他方法调用,则可以使用自我范围。

class Boat: 
    def sail(self, distance): 
     print("I am sailing for {0} meters").format(distance) 

    def do_stuff(self): 
     self.sail(5) 

现在您正在通过类(self)的实例调用此方法。这意味着它会正常工作。

如果您想从课程外部调用该方法,您首先需要创建该类的实例。

class Boat: 
    def sail(self, distance): 
     print("I am sailing for {0} meters").format(distance) 

boat = Boat() 
boat.sail(5) 

这样可以正常工作,因为您首先制作了一个Boat类的实例。当调用sail方法时,这个实例会自动作为参数传递(self)。

因为在你的例子中,它没有通过这个类的实例调用,它期望自动参数被手动传递。这就是为什么错误说它缺少1个参数。缺少的是自我论证。

+0

非常感谢@RemcoW,你已经很好地解释了。保存我的日子:-) – kaniska

相关问题