sayrong
(Sayrong)
26.Февраль.2018 08:59:09
#1
Всем привет!
Подскажите по структуре и реализации локаторов в page object на python.
В самом популярном tutorial приведен следующий пример:
class MainPageLocators(object):
"""A class for main page locators. All main page locators should come here"""
GO_BUTTON = (By.ID, 'submit')
Но по сути GO_BUTTON будет являться обычным тюплом.
И каком смысл выносить это в отдельный класс ?
Я считал, что локаторы представляют из себя объекты класса WebElement.
И реализовал их через гетторы без выделения в отдельный класс.
Пример
class LoginPage(Page):
#Locators by id
_loginField = 'loginText'
@property
def loginField(self):
return self.wd.find_element_by_id(self._loginField)
В какую сторону копать?)
Все работает, но хочется сделать правильную поддерживаемую структуру проекта.
zolkin
(Дмитрий Золкин)
26.Февраль.2018 09:06:02
#2
У меня так же)) Мне отдельный класс потом помогает, определить где локатор. Например класс для каждой формы отдельный, то же не знаю насколько правильно это…
Webelement вроде же получается после find_element_by_id(self._loginField), с которыми потом действия делаются (click , get_attribute и тд)
sayrong
(Sayrong)
26.Февраль.2018 11:17:52
#3
На самом деле понял, что указывал неправильно идентификаторы локаторов.
Лучше указывать через By
#Locators
_loginField = (By.ID, 'loginText')
_passwordField = (By.ID, 'passwordText')
_loginButton = (By.ID, 'loginButton')
_loginPage = (By.XPATH, '//*[@id="loginContent"]')
@property
def loginField(self):
return self.wd.find_element(*self._loginField)
Тем самым можно не указывать конкретный метод find_element (find_element_by_xpath или find_element_by_id).
А указывать общий и передавать tuple.