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

RobotFramework无法调用Python编写的Selenium自定义关键字求助

问题原因
  1. 类名与模块名不匹配:你在CommonKeywords.py里定义的类是BasePage,但Robot Framework导入Python库时,默认只会找和模块名同名的类(也就是CommonKeywords类),找不到对应类的话,里面的方法自然不会被识别成关键字。
  2. 导入时未指定类名:直接导入CommonKeywords.py,Robot不知道要加载模块里的BasePage类,所以找不到input_text1这个方法。
解决办法

有两种简单的修复方式:

方式一:修改Robot导入语句,指定类名

在脚本的*** Settings ***部分,导入CommonKeywords.py时加上要加载的类名BasePage:

*** Settings ***
Library  SeleniumLibrary
Library  ../ExternalKeywords/UserDefinedKeywords.py
Library  ../ExternalKeywords/CommonKeywords.py  BasePage

这样Robot就会加载CommonKeywords.py里的BasePage类,把类里的input_text1识别成可用关键字。

方式二:修改Python类名,和模块名保持一致

把CommonKeywords.py里的BasePage类名改成CommonKeywords,和模块名统一:

from robot.libraries.BuiltIn import BuiltIn
from robot.libraries.DateTime import datetime
from SeleniumLibrary import SeleniumLibrary
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver.remote.command import Command

# 类名改成和模块名一致的CommonKeywords
class CommonKeywords():
    def __init__(self):
        self.session = SeleniumLibrary(run_on_failure='Nothing')
        self.builtin = BuiltIn()
        self.datetime = datetime
        self.set_browser_settings()
    
    def screenshot(self):
        self.session.capture_page_screenshot()
    
    def set_browser_settings(self, browser='gc', timeout=10, implicit_wait=10, speed=0.1, run_on_failure='screenshot',
                             screenshot_root_directory=None):
        self.browser = browser
        self.selenium_timeout = timeout
        self.implicit_wait = implicit_wait
        self.selenium_speed = speed
        self.run_on_failure = run_on_failure
    
    def input_text1(self, locator, text):
        for i in range(3):
            try:
                self.session.wait_until_element_is_visible(locator)
                self.session.input_text(locator, text)
                break

            except:
                if i in range(2):
                    self.builtin.sleep(2)
                else:
                    self.screenshot()
                    raise

改完之后,原来的导入语句就能正常识别类里的方法了。

额外检查点

  • 确认../ExternalKeywords/这个路径是对的,要和你的Robot脚本文件位置对应,路径错了也会导致模块加载失败。
  • 检查Python文件有没有语法错误,语法错了会让模块加载失败,同样会提示关键字未定义。

内容的提问来源于stack exchange,提问作者Ranjeet Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:05:13