Замените if / elif - на python в коммутаторе с селеном (решения по упрощению кода) - PullRequest
0 голосов
/ 17 июня 2019

- этот вопрос не об устранении проблемы, а о том, как упростить существующий код - я работаю над Selenium с помощью фрейма автоматизации Python Work.Внутри моего класса Action () у меня есть несколько функций.2 из них, такие как Click () и Send_keys (), содержат много операторов if / elif.Может кто-нибудь помочь мне, как это можно изменить на логику переключения?Спасибо

try:
    if locatorStrategy == 'id':  # return by ID
        ele =  self.driver.find_element_by_id(locator).click()

    elif locatorStrategy == 'xp':  # return by XPATH
        ele =  self.driver.find_element_by_xpath(locator).click()

    elif locatorStrategy == 'li':  # return by link text
        ele =  self.driver.find_element_by_link_text(locator).click()

    elif locatorStrategy == 'na':  # return by name
        ele =  self.driver.find_element_by_name(locator).click()

    elif locatorStrategy == 'cs':  # return by css
        ele =  self.driver.find_element_by_css_selector(locator).click()

    elif locatorStrategy == 'pa':  # return by partiL LINK TEXT
        ele =  self.driver.find_element_by_partial_link_text(locator).click()

    elif locatorStrategy == 'ta':  # return by tag name
        ele =  self.driver.find_element_by_tag_name(locator).click()

    elif locatorStrategy == 'cl':  # return by class name
        ele =  self.driver.find_element_by_class_name(locator).click()
except Exception as e:
    logging.info(e)

Ответы [ 3 ]

0 голосов
/ 17 июня 2019

Используйте словарь.

ele = {'id': self.driver.find_element_by_id,
       'xp'; self.driver.find_element_by_xpath,
       'li': self.driver.find_element_by_link_text,
       'na': self.driver.find_element_by_name,
       'cs': self.driver.find_element_by_css_selector,
       'pa': self.driver.find_element_by_partial_link_text,
       'ta': self.driver.find_element_by_tag_name,
       'cl': self.driver.find_element_by_class_name,
 }[locatorStrategy](locator).click()

Или вместо двухбуквенных кодов используйте фактическое название метода (например, locatorStrategy = "find_element_by_id") и используйте:

ele = getattr(self.driver, locatorStrategy)(locator).click()

try/except будет таким же, как у вас.

0 голосов
/ 17 июня 2019

, хотя в python нет функции переключателя, вы можете использовать класс для создания такого класса как PythonSwitch:

    def switch(self, timezone):
        default = "unknown timezone"
        return getattr(self, 'case_' + str(timezone), lambda: default)()

    def case_UTC(self):
        return 0

    def case_BST(self):
        return 1

    def case_PDT(self):
        return -7

s = PythonSwitch()

print(s.switch(BST))
print(s.switch(UTC))
0 голосов
/ 17 июня 2019

В Python нет случаев переключения. Даже если бы это было так, это выглядело бы более или менее одинаково. Одна вещь, которую вы можете сделать, это создать словарь, а затем просто вызвать словарь [locatorStrategy], чтобы получить вашу функцию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...