2016-12-08 4 views
0

Я сделал способ щелкнуть по полю календаря, а затем выбрать дату, но когда я перемещаю параметры, возвращается ошибка.Ошибка при передаче двух параметров

Мой метод

def select_current_date(self, *locator1, *locator2): 

    self.driver.find_element(*locator1).click() 
    WebDriverWait(self.driver, AUTOCOMPLETE_TIMEOUT).until(
     EC.visibility_of_element_located((By.CSS_SELECTOR, ".ui-icon.ui-icon-circle-triangle-w"))) 
    self.driver.find_element(*locator2).click() 
    WebDriverWait(self.driver, AUTOCOMPLETE_TIMEOUT).until(
     EC.invisibility_of_element_located((By.CSS_SELECTOR, ".ui-datepicker-title"))) 

Передача параметров

self.select_current_date(*EventsLocators.RECEIVED, *EventsLocators.CURRENT_DATE) 

Моя ошибка

E  File "/Users/rafael/Desktop/projects/automated_tests/base.py", line 23 
E  def select_current_date(self, *locator1, *locator2): 
E            ^
E SyntaxError: invalid syntax 

Любая идея?

Cheers!

ответ

3

Вам не нужно (и на самом деле вы cannot do it this way) распаковывать аргументы, заменить:

def select_current_date(self, *locator1, *locator2): 

только с:

def select_current_date(self, locator1, locator2): 

При вызове метода, теперь просто использовать:

self.select_current_date(EventsLocators.RECEIVED, EventsLocators.CURRENT_DATE) 
+0

все еще я получаю ту же ошибку – RFtests

+0

@Rafael, потому что вам нужно удалить * при вызове метода. – alecxe

+0

@ Rafael и, похоже, вам может не понадобиться * при использовании 'locator1' и' locator2' внутри метода. – alecxe

-3

Python не имеет указателей, поэтому вам не нужно *

+2

Это не то, что '*' делает в Python. –

+0

python использует его для аргументов ключевого слова ('** kwargs') и использует, когда вы не знаете, сколько параметров (' * args') получит ваша функция. так что это неверная информация. – metmirr

+1

Фактически каждая переменная в Python является указателем. Все переменные указывают на объекты, следовательно, на указатель. –

1

Если вы read the docs для вашего метода вы увидите:

find_element(by='id', value=None)

Это означает, что find_element нужны два параметра. Я собираюсь выйти на конечность и предположить, что EventsLocators.RECEIVED - это 2-элементный список или кортеж. Если это не так, это не сработает. Но то, что вам действительно нужно сделать, это просто удалить * с от вашей функции определения и функции вызова:

def select_current_date(self, locator1, locator2): 

    self.driver.find_element(*locator1).click() 
    WebDriverWait(self.driver, AUTOCOMPLETE_TIMEOUT).until(
     EC.visibility_of_element_located((By.CSS_SELECTOR, ".ui-icon.ui-icon-circle-triangle-w"))) 
    self.driver.find_element(*locator2).click() 
    WebDriverWait(self.driver, AUTOCOMPLETE_TIMEOUT).until(
     EC.invisibility_of_element_located((By.CSS_SELECTOR, ".ui-datepicker-title"))) 

thing_one = ['by', 'value'] 
thing_two = ['replace', 'these things'] 
self.select_current_date(thing_one, thing_two) 

Я не знаю подробности о том, что вы передаете в, но они должны быть какие-то iterable, иначе ваши подписи функций не будут совпадать.

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