Python: расширение класса Selenium WebElement - PullRequest
1 голос
/ 23 февраля 2020

Когда я использую 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 использует его только для внутреннего использования.

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