Почему я не вижу методы AppiumLibrary, когда создаю подкласс?

В этой публикации StackOverflow Брайан Окли предложил создать подкласс AppiumLibrary и дал пример того, как это сделать. Я пытаюсь это сделать и у меня не получается. Например:

ActivePython 2.7.2.5 (ActiveState Software Inc.) based on
Python 2.7.2 (default, Jun 24 2011, 12:20:15)
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type “help”, “copyright”, “credits” or “license” for more information.

>>> from AppiumLibrary import AppiumLibrary
>>> class foo(AppiumLibrary):
…     pass
…
>>> f = foo()
>>> print f
<__main__.foo object at 0x102097bd0>
>>> print f.__dict__

{‘_running_on_failure_routine’: False, ‘_screenshot_index’: 0, ‘_run_on_failure_keyword’: ‘Capture Page Screenshot’, ‘_element_finder’: <AppiumLibrary.locators.elementfinder.ElementFinder object at 0x1036f7e50>, ‘_timeout_in_secs’: 5.0, ‘_bi’: <robot.libraries.BuiltIn.BuiltIn object at 0x1036f7d50>, ‘_cache’: <AppiumLibrary.utils.applicationcache.ApplicationCache object at 0x1036f7d90>}

>>> f.OpenApplication()
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
AttributeError: ‘foo’ object has no attribute ‘OpenApplication’

Почему это сработало для Брайана и Арона, а не для меня?

Спасибо, Мартин


person CMTaylor    schedule 11.02.2016    source источник


Ответы (1)


Мальчик, я чувствую себя глупо! Как только я перечитал свою собственную публикацию вопроса, я знал ответ. Ключевое слово Robot Framework — «Открыть приложение», но внутренний метод ключевого слова в AppiumLibrary — «open_application». При создании подклассов вы должны вызывать фактическое имя метода, а не «дружественное» ключевое слово RobotFramework!

Я до сих пор не понимаю, почему dict не перечисляет имена методов с ключевыми словами, но, возможно, я не понимаю чего-то в Python, что я должен знать, не спрашивая.

person CMTaylor    schedule 11.02.2016
comment
__dict__ для атрибутов. Я думаю, что вы хотите сделать dir(f). Это покажет все методы и атрибуты. Чтобы попробовать и увидеть только общедоступные методы - [x for x in dir(f) if inspect.ismethod(getattr(f,x)) and x[0]!='_']. Конечно, из всего этого есть исключения. - person ombre42; 12.02.2016