2016-05-10 34 views
1

私はPython、Seleniumの新機能です。私は実行中に次のエラーが発生しました。私は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' 

コード:Pythonのクラスで

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

明らかに、あなたのメソッドを(何らかの理由であなたのクラス定義の中で)呼び出すことを試みます。なぜなら、3つの引数だけを持つ4つのパラメータを含む 'test_something()'です。このメソッドを削除しようとすると、 'unittest'はそれを単独で呼び出すべきです。 – Andersson

+0

Thnx @Andersson – kaniska

答えて

2

パラメータは、このクラスの範囲内で渡されます。これはあなたのすべての方法であなたが持っている自己パラメータです。 これらのメソッドはクラス内にあるため、静的でない限り、単に呼び出すことはできません。それらを呼び出す場合は、まずクラスのインスタンスを作成する必要があります。その後、このインスタンスを通してメソッドを呼び出すことができ、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つの引数が欠落しているとエラーが示す理由です。行方不明のものは自己主張です。

+0

ありがとう@RemcoW、あなたはうまく説明しました。私の一日を保存しました:-) – kaniska

関連する問題