изучаю 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