отключить функцию цепочки вызова элегантным способом - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть эти две функции - по сути, одна пытается достичь элемента, а другая - просто оболочка для случая, когда элемент не был найден. В этом случае я не хочу разрешать щелчок по элементу, в противном случае выдается исключение.

def throw_if_element_unreachable(get_element_func) -> "throws error if element is not found":
    print("in throw if element is unreachable")
    def throw(*args, **kwargs):
        try:
            return get_element_func(*args, **kwargs)
        except NoSuchElementException:
            print("in except")
            return NoSuchElementException(f"Element {args[1]} was not found!")
    return throw

@throw_if_element_unreachable
def get_clickable_element(element_path_by: 'xpath/className/id path', path: 'actual element path', driver,
                          element_index=0) -> "return the wanted element if exists":
    # check_element_in_local_storage()
    switcher = {
        ElementPathBy.CLASS_NAME: driver.find_elements_by_class_name,
        ElementPathBy.XPATH: driver.find_elements_by_xpath,
        ElementPathBy.ID: driver.find_elements_by_id
    }
    return switcher[element_path_by](path)[element_index]

хочет предотвратить вызов .click, когда get_clickable_element возвращает None ..

 get_clickable_element(ElementPathBy.CLASS_NAME, "buyButton", driver).click() // dont allow .click 

, что является наиболее элегантным способом добиться этого без использования if ..

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