【发布时间】:2017-09-05 09:26:29
【问题描述】:
我正在尝试了解如何使用 R/RSelenium 上传文件。资料:
- 操作系统:Win 8.1,RSelenium_1.7.1,带有 docker 映像(linux,standalone-chrome 3.2.0)。
我尝试了这个 SO 问题的最高评论:
How to upload file using Selenium WebDriver in Java
例子:
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)
但我收到以下错误消息:
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
使用的文件夹映射到虚拟机。 Autoit 是不可能的,因为它只适用于 Windows。
还尝试了upload_btn$sendKeysToElement(list(path)),它不会返回错误,但它也不起作用。
感谢任何帮助。
编辑:
我认为这应该可以工作,但是在查看屏幕截图时我看到了一个错误:
- 将我的工作文件夹作为共享文件夹安装到
default虚拟机并命名为win_share - 使用
sudo mkdir vm_share在default上创建了一个文件夹 - 使用
sudo mount -t vboxsf win_share vm_share将win_share安装到文件夹vm_share。完成此步骤后,我可以成功访问虚拟机上的工作文件夹(由ssh检查到default)。 - vm_share文件夹的路径是
/home/docker/vm_share
在所有这些执行此脚本之后,它就不起作用了。 (以约翰为例)
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()
截图:
【问题讨论】:
-
您需要在 docker 容器上提供一个文件夹/路径。这又将映射到主机上的相应文件夹/路径。如果您传递一个将主机称为
path的文件夹,这将不起作用。 -
您似乎关注了stackoverflow.com/questions/30864466/… 创建了您的共享文件夹。在使用例如
docker run -d -v vm_share:/home/docker/vm_share -p 4445:4444 selenium/standalone-chrome启动 selenium docker 映像时,您需要参考此内容。这应该会在 boot2docker vm 文件夹和容器文件夹/home/docker/vm_share之间创建一个映射。 vm 文件夹本身已经映射到您的 Windows 主机。 -
很棒的工作,感谢您抽出宝贵的时间!
标签: r selenium file-upload rselenium