RSPEC + Capybara + poltergeist:如何将密钥发送到windows弹出的dialgue从浏览器打开

时间:2016-03-18 11:26:55

标签: rspec capybara poltergeist

我想使用Capybara将密钥发送到FileUpload窗口。 JavaScript驱动程序:Poltergeist。

用户界面: File Upload Window

click_button 'BrowseBtn'
sleep(1)
popup = page.driver.browser.window_handles.last
page.within_window(popup) do
page.find('body').native.send_key(pathToInvalidTestLicenseFile.to_s)
page.find('body').native.send_key(:Enter)
end

我不确定以下事项。 a)如何在单击“浏览”按钮后验证是否打开了弹出对话框?点击浏览按钮后我拍摄了屏幕截图,但是在屏幕截图中浏览窗口没有出现?是否可以预期? b)如何验证弹出式diaglog是否已收到密钥?

1 个答案:

答案 0 :(得分:0)

您不能将send_keys发送到系统文件选择对话框,您必须使用文件输入元素的标识符调用#attach_file。给出像

这样的html
<input type='file' id='my_file_input' name='my_file_input>

你会做类似

的事情
attach_file('my_file_input', pathToInvalidTestLicenseFile)

在你的考试中。文件字段中出现的一个问题是它们经常隐藏在页面上,并被替换为另一个可设置样式的元素。在这种情况下,您需要使用execute_script修改文件输入的css,以便在调用attach_file之前使其可见。你需要改变的css取决于元素的隐藏方式,但是如果它只是设置为不透明度:0那么类似

page.execute_script("$('#my_file_input').css('opacity', 1);")
page.attach_file('my_file_input', pathToInvalidTestLicenseFile)

应该可以工作(假设您在页面上使用jQuery - 如果没有,则交换标准DOM方法)。

=========================

作为第二个问题 - 如果你有代码打开另一个窗口,而不是使用驱动程序特定的方法和手动睡眠,你应该使用像

这样的东西
popup = window_opened_by { click_button 'BrowseBtn' }

在这种情况下,这不起作用,因为您没有打开新的浏览器窗口,而是触发了系统对话框的打开。