Ruby Selenium Webdriver:在 Mac Chrome 上关闭文件对话框

Ruby Selenium Webdriver: Close file dialog on Mac Chrome

这里HTML我要上传一张图片进行扫描:

<div class="capture_group">
  <div class="row wrapper capture_container">
    <input type="file" accept="image/*" capture="environment" id="camera" class="hidden" value="">
</div>
  <div class="wrapper column capture_controls">
    <label for="camera" class="btn">
      <p class="buttonBgText">Capture Passport Front</p>
    </label>
    <label for="camera" class="btn">
      <p class="buttonBgText">Capture Passport Back</p>
    </label>
  </div>
</div>

即使我手动处理 也没有检测到图像,所以我在测试中忽略了这个元素。

目前我可以上传并转到下一页的唯一方法是使用 attach_file

page.attach_file('/path/to/file.png') do
  page.find(:xpath, "//label[@for='camera'][2]").click
end

这对我不起作用,因为我观察到它只是上传,无论我将什么元素放入块中,并且默认情况下扫描非工作

page.find(:xpath, "//label[@for='camera'][2]").click
page.attach_file('/path/to/file.png')

这适用于我上传图像并扫描第二个

我想看看是否有任何脚本可以在扫描图像成功后关闭文件对话框。谢谢。

文件选择对话框是一个系统对话框,所以一旦它打开,浏览器就无法再控制它,所以如果你让它打开就差不多了,你就不走运了。

很难理解您在使用 attach_file 时遇到的问题以及为什么这对您不起作用。 attach_file 的块接受版本希望您执行通常会打开文件选择框的操作,然后将指定的文件附加到 元素,如果文件选择框已打开。从您的 HTML 可以看出,您的两个标签都连接到同一个文件输入元素(两者的 for 属性指定 'camera' id)。这意味着为了能够在同一张表格上同时添加护照的正面和背面图像,您需要一些 JS 来触发文件输入更改事件并将附加文件复制到其他存储位置。假设你有那个,并且我正在理解你的表单应该如何工作,然后做一些像

page.attach_file('/front_passport.jpg') do
  page.find(:label, 'Capture Passport Front').click
end

# An assertion to check that the file attachment has completed
# page.assert_text "Got front of passport" - minitest
# expect(page).to have_text("Got front of passport") - rspec
# Assert for whatever actually changes on the page when the front is added

page.attach_file('/back_passport.jpg') do
  page.find(:label, 'Capture Passport Back').click
end

应该可以。如果不是,您将需要更详细地解释您的页面到底在做什么。