如何使用selenium或webdriver处理测试自动化中的文件上载

lis*_*sak 23 java selenium automated-tests file-upload webdriver

我认为每个人如何使用Webdriver进行测试自动化必须意识到它对Web开发的巨大优势.

但如果文件上传是您的网络流量的一部分,那么存在一个巨大的问题.它不再是测试自动化.浏览器的安全限制(调用文件选择)实际上使得无法自动化测试.

Afaik唯一的选择是让webdriver单击文件上传按钮,睡眠线程,让开发人员/测试人员手动选择文件,然后执行其余的Web流程.

如何解决这个问题,有没有解决方法呢?因为它真的不能这样做.这没有意义.

这是我所知道的浏览器安全限制不适用的唯一情况:

<script language=javascript>   
  function window.onload(){   
          document.all.attachment.focus();   
          var WshShell=new ActiveXObject("WScript.Shell")   
          WshShell.sendKeys("D:\MyFile.doc")
  }   
</script>
Run Code Online (Sandbox Code Playgroud)

Aut*_*ter 40

Webdriver可以在IE和Firefox中轻松处理这个问题.它是一个查找元素并输入元素的简单案例.

driver = webdriver.Firefox()
element = driver.find_element_by_id("fileUpload")
element.send_keys("myfile.txt")
Run Code Online (Sandbox Code Playgroud)

上面的例子是在Python中,但你明白了

  • 只是补充一点,现在这也适用于谷歌浏览器! (4认同)
  • 谢谢AutomatedTester,它真的适用于Firefox.我误导了...... (2认同)
  • 我想指出的是,虽然上面的代码片段有效,但它主要用于本地WebDriver实例.如果您使用RemoteWebDriver,Grid2或SauceLabs,您可能需要添加更多代码才能使其正常工作.它变成了远程/网格的两步过程 - 文件被复制(通过Selenium中的JSONWireProtocol)从运行Selenium代码(作为源位置)到浏览器会话机器(远程/网格节点)然后从那里终止从节点机器上传到网站/应用程序.在我的下一条评论中有更多细节,因为我在这里用完了空间. (2认同)