You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:33:10