RobotFramework无法调用Python编写的Selenium自定义关键字求助
问题原因
- 类名与模块名不匹配:你在
CommonKeywords.py里定义的类是BasePage,但Robot Framework导入Python库时,默认只会找和模块名同名的类(也就是CommonKeywords类),找不到对应类的话,里面的方法自然不会被识别成关键字。 - 导入时未指定类名:直接导入
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
相关产品推荐
相关产品推荐

