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')
这适用于我上传图像并扫描第二个
- page.driver.browser.switch_to.alert.dismiss 对我不起作用,因为文件对话框不是警报
- 我无法执行 send_key(:escape) 以关闭或 send_keys(file_path) 以直接附加,因为
- 我也尝试在 env.rb 中将“select_file_dialogs.allowed”=> false 设置为 chrome 选项,但没有成功
我想看看是否有任何脚本可以在扫描图像成功后关闭文件对话框。谢谢。
文件选择对话框是一个系统对话框,所以一旦它打开,浏览器就无法再控制它,所以如果你让它打开就差不多了,你就不走运了。
很难理解您在使用 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
应该可以。如果不是,您将需要更详细地解释您的页面到底在做什么。
这里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')
这适用于我上传图像并扫描第二个
- page.driver.browser.switch_to.alert.dismiss 对我不起作用,因为文件对话框不是警报
- 我无法执行 send_key(:escape) 以关闭或 send_keys(file_path) 以直接附加,因为
- 我也尝试在 env.rb 中将“select_file_dialogs.allowed”=> false 设置为 chrome 选项,但没有成功
我想看看是否有任何脚本可以在扫描图像成功后关闭文件对话框。谢谢。
文件选择对话框是一个系统对话框,所以一旦它打开,浏览器就无法再控制它,所以如果你让它打开就差不多了,你就不走运了。
很难理解您在使用 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
应该可以。如果不是,您将需要更详细地解释您的页面到底在做什么。