RSPEC+Capybara + poltergeist :How to send keys to windows 从浏览器打开弹出对话框
RSPEC+Capybara + poltergeist :How to send keys to windows pop up dialgue opened from browser
我想使用 Capybara 将密钥发送到 FileUpload window。 JavaScript Driver : 闹鬼。
UI :
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) 如何验证单击浏览按钮后是否打开了弹出对话框?我在点击浏览按钮后截屏了,但是在截屏中浏览 window 没有出现?这是预期的吗?
b) 如何验证弹出对话框是否收到密钥?
您无法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 取决于元素的隐藏方式,但是如果它只是设置为 opacity: 0 那么类似于
page.execute_script("$('#my_file_input').css('opacity', 1);")
page.attach_file('my_file_input', pathToInvalidTestLicenseFile)
应该可以工作(假设您在页面上使用 jQuery - 如果没有则换成标准 DOM 方法)。
===========================
作为第二个问题 - 当您确实有打开另一个 window 的代码时,您应该使用类似
的方法而不是使用特定于驱动程序的方法和手动休眠
popup = window_opened_by { click_button 'BrowseBtn' }
这在这种情况下不起作用,因为您没有打开新的浏览器 window,而是触发系统对话框的打开。
我想使用 Capybara 将密钥发送到 FileUpload window。 JavaScript Driver : 闹鬼。
UI : 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) 如何验证单击浏览按钮后是否打开了弹出对话框?我在点击浏览按钮后截屏了,但是在截屏中浏览 window 没有出现?这是预期的吗? b) 如何验证弹出对话框是否收到密钥?
您无法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 取决于元素的隐藏方式,但是如果它只是设置为 opacity: 0 那么类似于
page.execute_script("$('#my_file_input').css('opacity', 1);")
page.attach_file('my_file_input', pathToInvalidTestLicenseFile)
应该可以工作(假设您在页面上使用 jQuery - 如果没有则换成标准 DOM 方法)。
===========================
作为第二个问题 - 当您确实有打开另一个 window 的代码时,您应该使用类似
的方法而不是使用特定于驱动程序的方法和手动休眠popup = window_opened_by { click_button 'BrowseBtn' }
这在这种情况下不起作用,因为您没有打开新的浏览器 window,而是触发系统对话框的打开。