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