Webdriver:file upload

有没有办法与webdriver中的file upload框交互? path被放入的表单字段是只读的,所以我不能写入。

您可以使用JavaScript设置您的input字段的值。 考虑到字段的id是fileName ,下面的例子将把input的值设置为文件C:\temp\file.txt

 String script = "document.getElementById('fileName').value='" + "C:\\\\temp\\\\file.txt" + "';"; ((IJavaScriptExecutor)driver).ExecuteScript(script); 

在这个例子中, driver是您的WebDriver实例。

请注意,对于类似于Windows的path,您必须使用四个反斜杠( \ ),因为您需要将双反斜线传递给JavaScript,所以您必须使用两个额外的斜线来转义。 另一个选项是使用正斜杠(例如"C:/tmp/file.txt" ),这也应该工作。

你可以做到这一点,而无需注入JavaScript。 你只需要掌握表单域并input。 就像(使用Ruby API):

 driver.find_element(:id, 'upload').send_keys('/foo/bar') 

我发现的问题是上传对话框挂起webdriver,直到closures。 也就是说,调用上传对话框的element.click在closures上传对话框之前不会返回。 要清楚, 上传对话框意味着一个OS本机文件select。

这是我的解决scheme(这有点复杂,但耸耸肩 *selenium的webdriver问题的大多数解决方法必须变得复杂)。

 # presumes webdriver has loaded the web page of interest element_input = webdriver.find_element_by_css_selector('input[id="uploadfile"]') handle_dialog(element_input, "foobar.txt") def handle_dialog(element_initiating_dialog, dialog_text_input): def _handle_dialog(_element_initiating_dialog): _element_initiating_dialog.click() # thread hangs here until upload dialog closes t = threading.Thread(target=_handle_dialog, args=[element_initiating_dialog] ) t.start() time.sleep(1) # poor thread synchronization, but good enough upload_dialog = webdriver.switch_to_active_element() upload_dialog.send_keys(dialog_text_input) upload_dialog.send_keys(selenium.webdriver.common.keys.Keys.ENTER) # the ENTER key closes the upload dialog, other thread exits 

在Ubuntu 12上使用python 2.7,webdriver 2.25.0,用firefox。

对于C#, SendKeys()作品,但你必须使用\在您的文件path而不是/

例如,下面的工作:

 string filePath = @"drive:\path\filename.filextension"; driver.FindElement(By.Id("fileInput")).SendKeys(filePath); 

但以下不起作用:

 string filePath = "drive:/path/filename.filextension"; driver.FindElement(By.Id("fileInput")).SendKeys(filePath); 

我们可以使用以下(ruby API)

 @driver.find_element(:xpath, "html/body/div[1]/div[2]/div[1]/form/div[4]/div[7]/table/tbody/tr[1]/td[2]/input").send_keys "C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg" 

这有助于我上传图片。