RSelenium findElement在firefox:2.53.1正常 latest镜像运行报错如何解决
问题原因
- 定位策略参数规范变更:你使用的2.53.1版本属于Selenium 2.x系列,允许使用
using = "class"作为类名定位的简写。而最新版Selenium镜像基于Selenium 3/4系列,强制适配W3C WebDriver标准,且火狐浏览器的驱动从原生内置替换为官方的GeckoDriver(也就是你观察到的进程名变为Gecko的原因),不再支持非标准的简写定位参数,只接受标准的class name作为类名定位的参数值。 - 返回值为空引发报错:当你传入不被识别的
class定位参数时,Selenium服务端没有返回匹配的元素结果,RSelenium调用结果列表的第一个元素时就会触发subscript out of bounds下标越界错误。
适配新版镜像的方案
- 直接修改定位参数:将原有代码中的
remDr$findElement(using = "class", "percent")替换为remDr$findElement(using = "class name", "percent")即可正常运行。 - 兼容性优化写法:如果需要同时兼容新旧版本的Selenium镜像,建议使用更通用的CSS选择器写法,修改为
remDr$findElement(using = "css selector", ".percent"),该写法在所有版本的Selenium服务中都可以正常识别,稳定性更高。 - 可选补充配置:初始化远程驱动时可以明确指定浏览器类型,避免新版服务端自动识别出错,修改初始化代码为
remDr <- remoteDriver(port = 4445L, browserName = "firefox")。
内容的提问来源于stack exchange,提问作者ixodid
相关产品推荐
相关产品推荐

