如何获取Appium WebDriver实例以自定义Robot Framework关键字?
问题:在Robot Framework中获取AppiumLibrary的Driver实例以调用原生Appium方法
我用AppiumLibrary搭建了一套Robot Framework测试套件,现在需要通过Python直接调用Appium原生方法(如driver.set_clipboard_value()),作用于已通过AppiumLibrary的Open Application关键字打开的Driver实例。
编写自定义库尝试实现时,运行报错:
============================================================================== App-Bevestigen ============================================================================== Clipboard | FAIL | No library 'AppiumLibrary' found. ------------------------------------------------------------------------------ App-Bevestigen | FAIL | 1 test, 0 passed, 1 failed ==============================================================================
我知道获取AppiumLibrary实例后,可通过current_application拿到Driver,进而调用原生方法,但目前连实例都无法获取,且对如何正确暴露方法存在困惑,已卡两天,求解决思路。
曾参考过一篇获取Selenium WebDriver实例的文章,复用其Python脚本但无效。
我的简化Robot脚本
*** Settings *** Library AppiumLibrary Library SetClipboardValue.py *** Test Cases *** Open application and copy to clipboard Open Application ... http://localhost:${APPIUM-PORT-ANDROID} ... appActivity=${appActivity} ... appPackage=${appPackage} ... automationName=${AUTOMATION-NAME-ANDROID} ... noReset=${NO-RESET-TestApp} ... platformName=${PLATFORM-NAME-ANDROID} ... udid=${UDID-ANDROID} ... alias=TestApp ${current_app_info}= get current application Log To Console ${current_app_info}
尝试获取实例的Python脚本
from robot.libraries.BuiltIn import BuiltIn def get_current_application(): return BuiltIn().get_library_instance('AppiumLibrary')._current_application()
解决方案
1. 修复「找不到AppiumLibrary」的问题
报错核心原因是获取实例时AppiumLibrary未完成初始化或引用名称错误:
- 确保自定义库在AppiumLibrary之后加载(你的脚本顺序已正确,若调整过顺序需改回)
- 若AppiumLibrary设置了库别名(如
Library AppiumLibrary alias=AppiumLib),则获取实例时需用别名替代AppiumLibrary - 你在
Open Application中设置的alias=TestApp是应用实例的别名,不是库别名,不影响库实例的获取
2. 正确获取Driver并调用原生方法
修改自定义库代码,确保拿到Driver后直接调用目标方法:
from robot.libraries.BuiltIn import BuiltIn def set_clipboard_value(value): # 获取AppiumLibrary实例 appium_lib = BuiltIn().get_library_instance('AppiumLibrary') # 获取当前应用的Driver实例(若有多个应用,可传入别名如'_current_application("TestApp")') driver = appium_lib._current_application() # 调用Appium原生剪贴板方法 driver.set_clipboard_value(value)
在Robot脚本中调用该自定义关键字:
Open application and copy to clipboard Open Application ... http://localhost:${APPIUM-PORT-ANDROID} ... appActivity=${appActivity} ... appPackage=${appPackage} ... automationName=${AUTOMATION-NAME-ANDROID} ... noReset=${NO-RESET-TestApp} ... platformName=${PLATFORM-NAME-ANDROID} ... udid=${UDID-ANDROID} ... alias=TestApp Set Clipboard Value 测试剪贴板内容
3. 注意事项
_current_application()是AppiumLibrary的私有方法,版本更新后可能存在变动,需与当前使用的库版本匹配- 若需调用更多原生方法,可按相同逻辑扩展自定义关键字
内容的提问来源于stack exchange,提问作者Lenny Frost
相关产品推荐
相关产品推荐

