Вы можете создать имя функции для вызова из locator_type
, а затем вызвать ее:
locator_type_lower = locator_type.lower()
find_function_name = 'find_element_by_{}'.format(locator_type_lower)
driver_function_to_call = getattr(self.__driver, find_function_name)
web_element = driver_function_to_call(element)
Вам, вероятно, следует обернуть это в некоторую проверку ошибок - проверьте, существует ли функция, проверьте, вызывается ли она и т. Д.
Что это делает:
преобразует тип locator_type в нижний регистр, затем создает, как мы надеемся, имя функции существующей функции в self .__ driver, а затем вызывает его с вашим элементом.
Этот метод имеет то преимущество, что вам не нужно отображать строки в функции - если self.__driver
имеет функцию с именем find_element_by_foo_bar_length
, то вы можете просто добавить FOO_BAR_LENGTH
в свою таблицу Excel, и он будет вызван , нет необходимости обновлять ваш картографический диктат.
Редактировать: обновлено для комментариев
Чтобы перевести строку locator_type в атрибут класса By
:
locator_type = 'ID'
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((getattr(By, locator_type), element)))