Rselenium无法连接到正在运行的闪亮应用

时间:2017-08-23 22:33:17

标签: r macos selenium 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)

它看起来像这样:

enter image description here

你知道为什么RSelenium看不到本地运行的闪亮应用程序吗?

2 个答案:

答案 0 :(得分:1)

我从@jdharrison 那里得到了很多很多帮助。

首先制作泊坞文撰写文件(注意缩进 - 一个缩进必须是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/

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

然后从docker-compose up文件所在的文件夹中运行docker-compose.yml

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

要检查它是否有效,您可以将以下代码保存为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)

并运行:

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

如果一切正常,你应该看截图: enter image description here

答案 1 :(得分:0)

有很多方法可以实现这一目标。最简单的方法是在--net=host模式下运行docker。这意味着平均selenium服务器在默认端口4444上运行

docker run -d --net=host selenium/standalone-chrome&

您的泊坞窗容器现在可以访问HOST localhost。

要在非默认PORT上运行,您可以将docker传递给selenium env变量:

docker run -d --net=host -e SE_OPTS="-port 4445" selenium/standalone-chrome