Webdriver:文件上传

Ref*_*lux 14 c# webdriver

有没有办法与webdriver中的文件上传框进行交互?路径放入的表单字段是只读的,所以我不能写入.

Ben*_*ole 20

您可以在不注入JavaScript的情况下执行此操作.您只需要掌握表单字段并输入即可.像(使用Ruby API):

driver.find_element(:id, 'upload').send_keys('/foo/bar')
Run Code Online (Sandbox Code Playgroud)

  • 你试过这个吗?在我的应用程序中,该字段肯定*看起来像它是只读的,它运作良好. (2认同)
  • C#版本:driver.FindElement(By.Id(“ FileUpload1”))。SendKeys(“ C:\\ foo \\ bar”); (2认同)

Ser*_*rov 10

您可以使用JavaScript设置输入字段的值.考虑到该字段的id是fileName以下示例,将设置文件输入的值C:\temp\file.txt:

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

在此示例中,driver是您的WebDriver实例.

请注意,\对于类似Windows的路径,您必须使用四个反斜杠(),因为您需要将两个反斜杠传递给JavaScript,因此您必须使用两个额外的斜杠来转义它们.另一种选择是使用正斜杠(例如"C:/tmp/file.txt"),这也应该有效.

  • 由于安全原因,这实际上是行不通的.例如,大多数浏览器都会阻止此操作!实际上它使用send_keys方法(不执行javascript) (2认同)

Gud*_*ain 5

对于C#,SendKeys()可以工作,但必须\在文件路径中使用,而不是/

例如,以下工作:

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

但是以下方法不起作用:

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

  • 这是依赖于 Linux 和 macOS 的平台,它是正斜杠。( / ) (3认同)