缺少1个必要的论证

时间:2016-05-10 09:44:26

标签: python selenium

我是python,selenium的新手。我在执行期间遇到了以下错误。我使用过Python 3.5.0

我如何在这个问题中使用参数? 有没有替代方法?

错误:

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()

1 个答案:

答案 0 :(得分:2)

在Python类中,使用此类的范围传递参数。这是您在所有方法中使用的自我参数。 因为这些方法属于类,所以不能只调用它们(除非它们是静态的)。如果要调用它们,必须先创建类的实例。之后,您可以通过此实例调用方法,并自动为您传递self参数。

正如其他人对您的问题发表评论一样,您无需亲自调用此方法,因为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)传递。

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