Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- action_chains = ActionChains(get_driver())
- action_chains.context_click(self.element()).perform()
- це мабуть занадто
- в селен і так має бути context_click
- просто пишеш self.element().context_click()
- і все
- а для того щоб працював автокомпліт і ти сама побачила що там цей контекст клік є..., треба ось таке дописати:
- def element(self):
- # type: () -> SeleneElement
- return self.container
- типу анотацію дописати
- її можна додати ось так: http://joxi.ru/BA0MKqGtJ10YLr
- але він у тебе не запрацює все одно... тому що ти нахімічила ось тут:
- @classmethod
- def default(cls, element):
- container = ss('.context-menu-item')
- #container = ss('.context-menu-list').element_by(visible) - doesn`t work, 'clear' object
- cls.element = element
- return ContextMenu(container, cls.element)
- чомусь присвоїла класу новий атрибут елемент, навіщо?
- все що тобі треба було зробити це от це:
- @classmethod
- def default(cls, element):
- return ContextMenu(сontainer=ss('.context-menu-item'), element=element)
- але є ще одна проблема...
- у тебе є поле element
- class ContextMenu(object):
- def __init__(self, container, element):
- self.element = element
- self.container = container
- і у тебе є метод element()
- def element(self):
- # type: () -> SeleneElement
- return self.container
- причому яке повертає просто контейнер :)
- це звісно ж зло :)
- метод element() не потрібен
- у тебе ж вже є self.container
- а елемент в даному випадку означає не елемент віджета а елемент на якому треба контекст-клікнути щоб віджет з'явився
- хех, халепа
- так що метод element(self) разом з анотацією типу треба кельнути...
- і дописати анотацію сюди:
- def __init__(self, container, element):
- # type: (SeleneElement, SeleneElement) -> None
- self.element = element
- self.container = container
- і тепер запрацює автокомпліт: http://joxi.ru/krD85aRIEG1Vor
- ги, але чорт, халепа, контекст кліка таки немає в селен, треба дописати: https://github.com/yashaka/selene/issues/85
- тому поки таки пиши ось так:
- def open(self):
- action_chains = ActionChains(get_driver())
- action_chains.context_click(self.element).perform()
- return self
- зверни увагу що self.element тут а не sele.element() (який був контейнером у тебе по факту)
- ну з цим розібрались...
- тепер повертаючись до чому поле не радагувалось...
- проблема живе ось тут:
- class Column(object):
- def __init__(self, container):
- self.container = container
- # 'clear'(first_by('css selector', '#table-container').find_by('css selector', 'thead')).find_all_by(
- # ('css selector', '.colHeader'))[0]
- #doesn`t work
- def element(self):
- return self.container
- def menu(self):
- return ContextMenu(self.container, element=self.container)
- в от цій останній стрічкі...
- element=self.container - це правильно, бо ми якраз контекстклікнути маємо по елементу який є контейнером для колумна
- але от це:
- ContextMenu(self.container
- не вірно... тут якраз має бути батьківський елемент контекст меню, тобто от цей:http://joxi.ru/ZrJNZxkf9QJ7wr
- тобто правильний код такий:
- def menu(self):
- return ContextMenu(ss('.context-menu-list').element_by(be.visible) , element=self.container)
- але о боже...
- що це?
- def select(self, item):
- self.container.element_by(text(item)).click()
- як це таке може бути що контейнер це список?
- контйнер це елемент!
- :(
- в елемента немає метода element_by
- тому можна тільки так:
- def select(self, item):
- self.container.element(by.text(item)).click()
- де text - це вже не кондішен...
- щоб не плутати... юзай селектори-заготовки ті що в by
- а кондішени не напряму а через модулі be, have
- типу be.visible
- have.text
- але
- by.text
- by.xpath
- і так далі...
- а тепер ось ще одна помилка:
- class Category(object):
- def __init__(self, name):
- self.name = name
- def element(self):
- return ss('.category-item').find_by(text(self.name))
- def menu(self):
- return ContextMenu.default(self.element)
- element - це метод а не поле, тому треба так писати:
- def menu(self):
- return ContextMenu.default(self.element())
- і тепер уже все має працювати...
- ох... не хило я так собі мозок тільки що взламав :)
Advertisement
Add Comment
Please, Sign In to add comment