从pytest+Selenium迁移至RobotFramework,SeleniumLibrary的executable_path失效求解决
在Robot Framework + SeleniumLibrary中指定ChromeDriver路径的替代方案
我的场景与问题
我正从pytest + Selenium切换至Robot Framework + SeleniumLibrary + Selenium。虽然SeleniumLibrary的关键字设计得更友好,但有些原生Selenium里的简单操作找不到对应的正确用法,比如指定ChromeDriver的executable_path这件事,试了各种方案都没成功。
在pytest里我是这么创建WebDriver的:
driver = Chrome(executable_path='../drivers/chromedriver') driver.get("https://<URL>")
但在Robot Framework里,下面几种写法都失效了:
写法1:直接在Open Browser里传参数
*** Settings *** Documentation Suite description Library SeleniumLibrary *** Variables *** ${URL} https://<URL> *** Test Cases *** Login_test Open Browser ${URL} Chrome executable_path="/path/to/driver/chromedriver"
写法2:设置环境变量
*** Settings *** Documentation Suite description Library SeleniumLibrary Library OperatingSystem *** Variables *** ${URL} https://<URL> ${EXECDIR} /path/to/driver/ *** Test Cases *** Login_test Set Environment Variable webdriver.chrome.driver ${EXECDIR} Open Browser ${URL} Chrome
写法3:用Create Webdriver关键字
*** Settings *** Documentation Suite description Library SeleniumLibrary *** Variables *** ${URL} https://<URL> ${chromedriver} /path/to/driver/chromedriver *** Test Cases *** Login_test Create Webdriver Chrome chrome executable_path=${chromedriver} Go To ${URL}
现在想请教:除了手动把驱动路径加到系统PATH环境变量外,还有别的解决方法吗?
可行的替代方案
别着急,我来给你几个靠谱的解决办法,都是不用改系统PATH就能搞定的:
1. 修正Create Webdriver的参数写法
你之前用Create Webdriver时参数顺序错了,SeleniumLibrary的这个关键字里,浏览器类型后面直接跟命名参数就行,不需要重复写chrome。正确写法如下:
*** Test Cases *** Login_test Create Webdriver Chrome executable_path=${chromedriver} Go To ${URL} # 记得测试结束关闭浏览器 Close Browser
如果需要同时配置多个Chrome选项,也可以用字典格式传递:
*** Variables *** ${CHROME_SETTINGS} ${executable_path}=/path/to/driver/chromedriver ${headless}=True *** Test Cases *** Login_test Create Webdriver Chrome options=${CHROME_SETTINGS} Go To ${URL}
2. 导入SeleniumLibrary时直接指定驱动路径
这个方法一劳永逸,在Settings段导入库的时候,通过chromedriver_path参数直接指定驱动文件路径,整个测试套件的用例都能自动识别:
*** Settings *** Documentation Suite description Library SeleniumLibrary chromedriver_path=/path/to/driver/chromedriver *** Variables *** ${URL} https://<URL> *** Test Cases *** Login_test Open Browser ${URL} Chrome
3. 用Open Browser的desired_capabilities参数传递
把驱动路径封装到desired_capabilities字典里,传递给Open Browser关键字:
*** Variables *** ${DRIVER_CAPS} ${chromeOptions}=${{executable_path:'/path/to/driver/chromedriver'}} *** Test Cases *** Login_test Open Browser ${URL} Chrome desired_capabilities=${DRIVER_CAPS}
为啥你之前的写法失效了?
简单说下你踩的几个小坑:
- 第一种写法里,
Open Browser不支持直接把executable_path作为位置参数传递,它的第三个参数之后只接受options或desired_capabilities这类结构化参数。 - 第二种写法里,你只传了驱动所在目录,没指定具体的
chromedriver文件,而且有些Selenium版本不会即时读取临时设置的环境变量,正确的环境变量值应该是完整的驱动文件路径,比如${EXECDIR}chromedriver。 - 第三种写法多写了一个
chrome参数,导致参数顺序混乱,Create Webdriver的第二个参数是options,不是重复的浏览器名称。
内容的提问来源于stack exchange,提问作者lexadler
相关产品推荐
相关产品推荐

