传递两个参数时出错

时间:2016-12-08 19:17:08

标签: python python-2.7 selenium

我做了一个方法来点击日历字段,然后选择日期,但是当我移动参数时,返回错误。

我的方法

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

有什么想法吗?

干杯!

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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)

我不知道你传入的内容的细节,但它们必须是某种可迭代的,否则你的功能签名就不会匹配。

答案 2 :(得分:-3)

Python没有指针,所以你不需要*那里