Rselenium无法连接到运行闪亮的应用程序

Taz*_*Taz 5 macos selenium r shiny rselenium

我在docker中配置了selenium服务器.它工作正常 - 我可以连接到它,但当我想与运行本地闪亮的应用程序进行交互Rselenium没有看到它.详情如下:

我一步一步地做了:

  • 我运行selenium服务器:

    docker run -d -p 4445:4444 selenium/standalone-chrome

  • 成功连接到selenium服务器:

remDr <- remoteDriver(remoteServerAddr = "localhost" , port = 4445L , browserName = "chrome" , platform = "MAC")

> remDr$open() [1] "Connecting to remote server"

  • 从终端运行闪亮的应用程序(在单独的r会话中):

> shiny::runApp(file.path(find.package("RSelenium"), "apps", "shinytestapp"), port = 6012) Listening on http://127.0.0.1:6012

  • 然后尝试做一些测试:

remDr$navigate("localhost:6012") appTitle <- remDr$getTitle()[[1]] expect_equal(appTitle, "Shiny Test App")

并得到错误:

Error: 'appTitle' not equal to "Shiny Test App". 1/1 mismatches x[1]: "localhost" y[1]: "Shiny Test App"

  • 毕竟我做了一个截图:

remDr$screenshot(display = TRUE)

它看起来像这样:

在此输入图像描述

你知道为什么RSelenium看不到本地运行的闪亮app吗?

Taz*_*Taz 3

我在@jdarrison 的帮助下找到了答案。

首先制作 docker compose 文件(注意缩进 - 一个缩进必须是 2 个空格)并另存为docker-compose.yml

version: '2'
services:
  ropensci:
    image: rocker/ropensci
    ports:
      - "8788:8787"
    links:
      - selenium:selenium
      - shiny:shiny
  selenium:
    image: selenium/standalone-chrome
    ports:
      - "4445:4444"
    links:
      - shiny:shiny
  shiny:
    image: rocker/shiny
    container_name: shiny
    volumes:
      - ~/Users/username/services/volumes/shiny/apps:/srv/shiny-server/
      - ~/Users/username/services/volumes/shiny/logs:/var/log/
      - ~/Users/username/services/volumes/shiny/packages:/home/shiny/
Run Code Online (Sandbox Code Playgroud)

或下载: https: //codeshare.io/2j4yLB

然后docker-compose updocker-compose.yml文件所在的文件夹运行。

  • 将您的应用程序添加到/home/username/services/volumes/shiny/apps
  • 从 selenium 使用导航到您的应用程序http://shiny:3838/myapp

要检查它是否有效,您可以保存以下代码,如下app.R所示~/Users/username/services/volumes/shiny/apps/example/

library(shiny)
server <- function(input, output) {
  output$distPlot <- renderPlot({
    hist(rnorm(input$obs), col = 'darkgray', border = 'white')
  })
}
ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      sliderInput("obs", "Number of observations:", min = 10, max = 500, value = 100)
    ),
    mainPanel(plotOutput("distPlot"))
  )
)
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

并运行:

library(RSelenium) 
remDr <- remoteDriver(remoteServerAddr = "selenium", port = 4444L, browser = "chrome") 
remDr$open()
remDr$navigate(url = "http://shiny:3838/example")
remDr$screenshot(display = TRUE)
Run Code Online (Sandbox Code Playgroud)

如果一切正常,您应该看到屏幕截图: 在此输入图像描述