How can I work with file uploads during a Webdriver test?
This is a canonical question, intended to provide a comprehensive answer to many related questions
During the course of a Webdriver test, I want to upload files. However, this opens a native file picker, which Webdriver doesn't seem to support interacting with. How do I interact with it?
Uploading files using Webdriver
Note: this answer applies to Selenium 2. Apparently Selenium 3 changed the interface again.
If the file is on the same machine or a mapped network drive, this is actually really straightforward: You need to "type" the path to the file into the file upload control. Example:
driver = webdriver.Firefox() element = driver.find_element_by_id("fileUpload") element.send_keys("C:\myfile.txt")
(Code from This SO answer)
In order to enable the transfer of the file from your local machine to the remote machine so it can be uploaded, you need to set what's called a File Detector. Java example:
driver.setFileDetector(new LocalFileDetector()); WebElement upload = driver.findElement(By.id("myfile")); upload.sendKeys("/Users/sso/the/local/path/to/darkbulb.jpg");
(Code from, and more information located at, Sauce Labs)
I am getting error `selenium.common.exceptions.WebDriverException: Message: unknown error: cannot focus element`
@Sislam You should ask a question, the comments here aren't the right place to get help. When you do, please include the snippet of HTML you're trying to automate against, as I suspect that'll be important
@mosaad I've never used it. Try it and let me know? I'd be glad to update if it's different now.
@Yamikuronue driver. does not have setFileDetector for me so I guess it changed, but I don't know to what
@mosaad My company hasn't updated to Selenium 3 yet, but I've annotated the answer and put out a bounty. Hopefully it'll get an update for Selenium 3 soon!