2016-05-10 3 views
1

Я новичок в python, selenium. Во время выполнения я получил следующую ошибку. Я использовал Python 3.5.0отсутствует 1 обязательный аргумент

Как я могу использовать аргумент в этой проблеме? Есть ли альтернативный метод?

Ошибка:

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 параметра с тремя аргументами. Попробуйте удалить этот метод, вызывающий '' 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. При вызове метода паруса этот экземпляр автоматически передается как параметр (self).

Поскольку в вашем примере он не вызывается через экземпляр этого класса, он ожидает, что параметр self будет передан вручную. Вот почему ошибка говорит, что отсутствует 1 аргумент. Тот, который отсутствует, - это аргумент самого себя.

+0

Спасибо большое @RemcoW, вы прекрасно объяснили. Спас мой день :-) – kaniska

Смежные вопросы