使用shinytest::recordTest()时遇ReferenceError: Pickr未找到问题求助
解决shinytest::recordTest()与shinyWidgets::colorPickr的兼容性错误
问题原因
你遇到的ReferenceError: Can't find variable: Pickr错误,本质是shinytest默认依赖的PhantomJS(已停止维护的旧版无头浏览器)无法正确加载colorPickr组件依赖的Pickr JavaScript库,或者不支持该库所需的现代JS特性。
解决方案
1. 切换到Chrome Headless浏览器(推荐)
PhantomJS已停止更新,对现代JS支持不足,改用Chrome Headless可彻底解决这类兼容性问题:
- 确保已安装Google Chrome浏览器;
- 调用
recordTest时指定浏览器参数:shinytest::recordTest(browser = "chrome")
Chrome Headless支持所有现代JS特性,能正常渲染colorPickr组件,录制测试流程不受影响。
2. 手动引入Pickr的JS库(适配PhantomJS场景)
如果必须使用PhantomJS,可在UI中提前引入Pickr的CDN资源,确保PhantomJS能加载到Pickr变量:
修改你的UI代码,在fluidPage内添加头部脚本:
ui <- fluidPage( tags$head( tags$script(src = "https://cdn.jsdelivr.net/npm/pickr-widget@1.8.2/dist/pickr.min.js") ), # 原有UI内容... titlePanel("Hello Shiny!"), sidebarLayout( # ... ) )
之后再运行shinytest::recordTest()即可避免找不到变量的错误。
3. 升级R及相关包到最新版本
你的R版本(3.6.0)和部分包版本较老旧,新版本可能修复了兼容性问题:
- 升级R到4.0及以上版本;
- 更新所有相关包:
update.packages(c("shiny", "shinyWidgets", "shinytest"), dependencies = TRUE)
目前shinyWidgets最新版本已更新到0.8.x,对shinytest的兼容性更好。
验证
使用方案1的Chrome Headless方式,运行你提供的示例代码,调用shinytest::recordTest(browser = "chrome"),即可正常启动录制界面,不再出现Pickr变量错误。
内容的提问来源于stack exchange,提问作者e_k
相关产品推荐
相关产品推荐

