2017-08-23 1 views
3

J'ai configuré le serveur sélenium dans docker. Cela fonctionne bien - je peux me connecter, mais quand je veux interagir avec l'application locale brillante, Rselenium ne le voit pas. Détails ci-dessous:Rselenium ne peut pas se connecter à l'application brillante en cours d'exécution

Je ne l'étape par étape:

  • Je lance le serveur de sélénium:

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

  • connecté avec succès au serveur de sélénium:

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

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

  • run app brillante du terminal (en session r séparée):

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

  • puis a essayé de faire quelques tests:

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

et obtenu l'erreur:

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

  • après tout ce que je fait une capture d'écran:

remDr$screenshot(display = TRUE)

et il ressemble à ceci:

enter image description here

Avez-vous une idée pourquoi RSelenium ne voit pas l'application brillante s'exécuter localement?

+0

@ jdharrison Je montai docker en utilisant la commande de votre commande et il ressemble à ceci: 'PORTS: 0.0.0.0:6012->6012/tcp, 0,0. 0.0: 4445-> 4444/tcp' mais RSelenium ne voit toujours pas l'application brillante. D'autres idées? – Taz

Répondre

1

I figured it out avec un beaucoup d'aide de @jdharrison.

d'abord faire fichier Compose docker (attention aux empreintes - un indention doit être 2 places) et sauf 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/ 

ou télécharger: https://codeshare.io/2j4yLB

puis exécutez docker-compose up à partir du dossier où docker-compose.yml fichier est.

  • Ajoutez vos applications à /home/username/services/volumes/shiny/apps
  • Pour accéder à votre application à partir utiliser le sélénium http://shiny:3838/myapp

Pour vérifier si cela fonctionne, vous pouvez enregistrer sous le code comme app.R dans: ~/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) 

et de fonctionner:

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

Si tout est ok, vous devriez voir capture d'écran: enter image description here

+0

Ouais docker compose est la façon de faire cela. – jdharrison

0

Il y a plusieurs façons d'obtenir ceci. Le moyen le plus simple est d'exécuter docker en mode --net=host. Cela signifie signifie serveur de sélénium fonctionne sur le port par défaut 4444

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

Votre conteneur docker aura désormais accès à l'hôte localhost.

Pour exécuter sur un port non par défaut, vous pouvez passer Docker une variable d'env sélénium:

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

Lorsque je lance un docker comme celui-ci, je ne peux pas me connecter au docker sur le port 4444: 'Impossible de se connecter au port localhost 4444: Refus de la connexion'. Je travaille sur mac osx - est-ce important? – Taz

+0

Oui le port 4444 semble parfois être un problème sur MAC. Vous pouvez définir le conteneur docker pour qu'il s'exécute sur une alternative comme indiqué ci-dessus. – jdharrison

+0

Toujours la même erreur: 'Erreur non définie dans l'appel httr. httr output: Echec de la connexion au port localhost 4445: Connexion refusée'. Peut-être que je devrais reconfigurer quelque chose? Peut-être que je devrais faire quelque chose avec les paramètres de proxy? Ou autre chose? – Taz