t.me/atinfo_chat Telegram группа по автоматизации тестирования

Обработка форм в WebDriver + Python + PageObject

Теги: #<Tag:0x00007f749412dd00> #<Tag:0x00007f749412dc10> #<Tag:0x00007f749412daf8>

Здравствуйте,

изучаю webdriver + python. Интересует вот какой вопрос. Допустим есть страница с формой на которой множество textfield для ввода (некоторые mandatory некоторые нет). Как лучше оформить это в рамках PageObject? Т.е. можно конечно описать отдельно все поля в рамках страницы а потом для каждого из них делать send_keys(data), но думаю неплохо бы иметь форму как отдельный объект со стандартыми методами чтобы заполнять как-то вроде
form.fill(data) (где data, допустим словарь)

Может есть какие стандартные подходы/best practises для этого, примеры?

mandatory или нет поле - не столь важно, в любом случае нужно будет делать проверку с пустым полем. По поводу объединения в один объект, тут уж как вам удобнее. ну и в любом случае, каждое поле по отдельности я бы обернул в объект с getter и setter и другими полезными методами. Как нибудь так:

class Element(object):

    def __init__(self, _type, _locator):
        self._type = _type
        self._locator = _locator

    def _get_element(self):
        driver = SeleniumWrapper().driver
        element = WebDriverWait(driver, 10).until(
            ec.visibility_of_element_located((self._type, self._locator))
        )
        return element

    @property
    def text(self):
        element = self._get_element()
        return element.text

    @text.setter
    def text(self, value):
        element = self._get_element()
        element.clear()
        element.send_keys(value)


class TextElement(Element):

    def clear(self):
        element = self._get_element()
        element.clear()

Потом уже в самом page object наследуете text field например ФИО от класса TextElement

2 Симпатий