带有Selenium和远程Chrome的水豚-如何附加文件进行上传?

时间:2018-11-20 15:01:14

标签: ruby-on-rails selenium rspec capybara selenium-chromedriver

我的情况是在网站上单击图标打开文件浏览器。是否可以将图像附加到规范中打开的文件浏览器窗口。我的配置是Docker,Capybara,Selenium驱动程序。我正在无头和无头浏览器(Chrome)上进行测试

3 个答案:

答案 0 :(得分:1)

文件输入的问题是实际的<input type="file" ...>元素通常被隐藏,然后在页面上添加一个按钮来触发文件选择。 Capybara不会与不可见的元素进行交互,因为用户无法进行交互,不幸的是,一旦显示了文件选择对话框(系统对话框),浏览器就无法对其进行任何控制,因此无法使其自动化。解决方法是不要单击打开文件选择的按钮,而是暂时使<input type="file" ...>元素在页面上可见,以便可以与之交互。为此,水豚提供了make_visible选项,如文档-https://www.rubydoc.info/github/teamcapybara/capybara/Capybara/Node/Actions#attach_file-instance_method所示。

attach_file('name, id, or label text of field', file_to_attach, make_visible: true)

答案 1 :(得分:0)

通常,如Thomas Walpole所述,文件输入是隐藏的。在代码中,当您在开发人员工具中看到时,您可以看到“隐藏”属性。

您可以尝试通过JS脚本删除隐藏的属性并上传文件。

Capybara.current_session.execute_script(
    "document.querySelector('element_locator').removeAttribute('hidden')"
  )

然后附加文件

page.attach_file(
        element_locator,
        Rails.root.join("features", "support", "upload_files", "file_name")
      )

我将要上传的文件放在路径功能->支持-> upload_files->文件名

这应该有效。

答案 2 :(得分:0)

请注意,对于Capybara和远程Chrome,文件系统是不同的,因为它们在不同的容器中运行。 您可以将带有文件的卷附加到两个容器的相同路径上。然后,可以通过远程Chrome找到Capybara指定的文件路径。