Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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

page-object
python
webdriver
Теги: #<Tag:0x00007f7b620b88c8> #<Tag:0x00007f7b620b8738> #<Tag:0x00007f7b620b8440>

(Maxim Aliseiko) #1

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

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

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


(rmerkushin) #2

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