J'essaie de savoir comment télécharger un fichier en utilisant R/RSelenium. Informations:Comment télécharger des fichiers avec RSelenium?
- OS: Win 8.1, RSelenium_1.7.1, avec une image docker (linux, standalone-chrome 3.2.0).
J'ai essayé le commentaire haut de cette question SO:
How to upload file using Selenium WebDriver in Java
Exemple:
url <- "https://www.freepdfconvert.com/pdf-word"
path <- "C:/path_to_folder/filename.pdf"
remDr$navigate(url)
upload_btn <- remDr$findElement(using = "id", "clientUpload")
upload_btn$sendKeysToElement(path)
Mais je reçois le message d'erreur suivant:
Selenium message:java.lang.String cannot be cast to java.util.List
Error: Summary: UnknownError
Detail: An unknown server-side error occurred while processing the command.
class: java.lang.ClassCastException
Further Details: run errorDetails method
Le le dossier utilisé est mappe d à la machine virtuelle. Autoit est hors de question car il ne fonctionne que sur Windows.
Également essayé upload_btn$sendKeysToElement(list(path))
qui ne renvoie pas d'erreur, mais cela ne fonctionne pas non plus.
Toute aide est appréciée.
Modifier:
Je pense que cela est censé travailler, mais je vois une erreur lors de l'affichage d'une capture d'écran:
- Mounted mon dossier de travail à la machine virtuelle
default
comme un dossier partagé et l'a nomméwin_share
- Créé un dossier sur
default
avecsudo mkdir vm_share
- Monté
win_share
dans le dossiervm_share
avecsudo mount -t vboxsf win_share vm_share
. Après cette étape, je peux accéder avec succès à mon dossier de travail sur la machine virtuelle (vérifié parssh
dansdefault
). - Le chemin du dossier vm_share est
/home/docker/vm_share
Après toutes ces exécution de ce script, il ne fonctionne pas. (A pris l'exemple de John)
library(RSelenium)
remDr <- remoteDriver(remoteServerAddr = "192.168.99.100"
, port = 4445L
, browserName = "chrome"
)
remDr$open()
remDr$navigate("https://gallery.shinyapps.io/uploadfile")
webElem <- remDr$findElement("id", "file1")
# create a dummy csv
x <- data.frame(a = 1:4, b = 5:8, c = letters[1:4])
write.csv(x, file = "testcsv.csv", row.names = FALSE)
# post the file to the app
path <- "/home/docker/vm_share/testcsv.csv"
webElem$sendKeysToElement(list(path))
remDr$close()
remDr$closeServer()
Screenshot:
Vous devrez donner un dossier/chemin sur le conteneur docker. Ceci à son tour serait mappé à un dossier/chemin correspondant sur l'hôte.Si vous passez un dossier faisant référence à l'hôte comme votre «chemin» cela ne fonctionnera pas. – jdharrison
Il semble que vous ayez suivi http://stackoverflow.com/questions/30864466/whats-the-best-way-to-share-files-from-windows-to-boot2docker-vm pour créer votre dossier partagé. Vous auriez besoin de faire référence à ceci lors du démarrage de votre image docker selenium en utilisant par exemple 'docker run -d -v vm_share:/home/docker/vm_share -p 4445: 4444 selenium/standalone-chrome'. Cela devrait ensuite créer un mappage entre le dossier boot2docker vm et le dossier de conteneur '/ home/docker/vm_share'. Le dossier vm lui-même déjà mappé à votre hôte Windows. – jdharrison
super travail, merci de prendre votre temps avec ça! – GyD