Когда я использую Selenium, я получаю доступ к HTML элементам с функцией S()
, так что я получаю синтаксис, который проще и больше похож на jQuery:
def S(input, t=10):
return Wait(driver, t).until(EC.presence_of_element_located((By.CSS_SELECTOR, input)))
Используя это, вы получаете:
S('button').click()
Но Selenium не хватает многих функций jQuery, таких как .parent()
, .val()
и т. Д.
Функцию .parent()
можно заполнить, просто вызвав .find_element_by_xpath('..')
.
Итак, я планирую создать новый класс, который наследуется от класса WebElement
, выполнив что-то вроде этого:
class WebElement2(WebElement):
def parent(self):
return self.find_element_by_xpath('..')
Однако это решит только первый шаг, потому что после создавая этот замещающий класс, я должен заменить ряд функций и классов, которые ведут к:
Wait(driver, t).until(EC.presence_of_element_located((By.CSS_SELECTOR, input)))
Так может ли кто-нибудь помочь мне понять путь, по которому он идет? Можно ли будет делать то, что я ищу? Можно ли это сделать, создав новые классы и унаследовав от существующих?
Я посмотрел на файлы Selenium и до сих пор работал:
expected_conditions.py
- class presence_of_element_located
- def _find_element
webdriver.py
- def find_element
- def execute
presence_of_element_located
вызывает _find_element
, который вызывает find_element
, который вызывает execute
, и тогда я не могу понять, что он делает после этого.
PS Я знаю, что создание функции .parent()
будет cla sh с существующей функцией .parent()
, которая делает что-то еще. Существующий может быть переименован, потому что Selenium использует его только для внутреннего использования.