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

Python. Selene. Определение элементов в классовых полях

selene
python
Теги: #<Tag:0x00007f7b652dab30> #<Tag:0x00007f7b652da9c8>

(Maxim Zaitsev) #1

Всем привет.
Бьют ли за такое ?

(В проекте много различных web-форм, имеющих схожие элементы, но, как правило, с разными локаторами)

from selene.support.jquery_style_selectors import s

class BaseForm:

    name_fld = s('#name')
    create_btn = s('#create')
    delete_btn = s('#action_delete')
    update_btn = s('#action_update')

    def fill_form(self, entity):
        self.name_fld.set(entity.name)

    def create(self):
        self.create_btn.click()

    def delete(self):
        self.delete_btn.click()

    def update(self):
        self.update_btn.click()


class UserForm(BaseForm):

    name_fld = s('#username')
    create_btn = s('#create_user')
    password_fld = s('#password')
    
    def fill_form(self, entity):
        super().fill_form(entity)
        self.password_fld.set(entity.password)

(Vatslau) #2

Так а в чём проблема

имеющих схожие элементы, но, как правило, с разными локаторами

разный локатор == разный элемент.
разная форма == разный пейдж объект
внешняя схожесть - обман.

Если проблема в копи-пасте
на бекенде просто как правило используют темплейты
можете спросить\эмпирически проверить совпадения
сделать бейз форм класс - а конкретные формы наследовать…


(Maxim Zaitsev) #3

Спасибо за ответ. Да, проблема исключительно в копи-пасте.
Классовые поля в питоне переопределяются при наследовании. Поэтому есть желание использовать определение элементов именно в классе. На практике этот прием не вызывает проблем (по крайней мере у меня), но смущает факт того, что во всех доках/примерах по selenium определение элементов идет в свойствах объекта.