Skip to content

Commit 696f9d3

Browse files
committed
Add react based test around rapid set
1 parent 2058fe1 commit 696f9d3

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

lib/capybara/selenium/node.rb

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -279,16 +279,20 @@ def set_text(value, clear: nil, rapid: nil, **_unused)
279279
send_keys(*clear, value)
280280
else
281281
driver.execute_script 'arguments[0].select()', self unless clear == :none
282-
if rapid == true || (value.length > 30 && rapid != false)
282+
if rapid == true || ((value.length > auto_rapid_set_length) && rapid != false)
283283
send_keys(value[0..3])
284-
driver.execute_script RAPID_SET_TEXT, self, value[4...-3]
284+
driver.execute_script RAPID_SET_TEXT, self, value[0...-3]
285285
send_keys(value[-3..-1])
286286
else
287287
send_keys(value)
288288
end
289289
end
290290
end
291291

292+
def auto_rapid_set_length
293+
30
294+
end
295+
292296
def perform_with_options(click_options, &block)
293297
raise ArgumentError, 'A block must be provided' unless block
294298

@@ -531,9 +535,8 @@ def attrs(*attr_names)
531535
JS
532536

533537
RAPID_SET_TEXT = <<~'JS'
534-
(function(el, val) {
535-
var value = el.value + val;
536-
if (el.maxLength != -1){
538+
(function(el, value) {
539+
if (el.maxLength && el.maxLength != -1){
537540
value = value.slice(0, el.maxLength);
538541
}
539542
el.value = value;

spec/shared_selenium_session.rb

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -441,21 +441,32 @@
441441
context 'controlled components' do
442442
it 'can set and clear a text field' do
443443
skip "This test doesn't support older browsers" if ie?(session)
444-
# session.visit 'https://reactjs.org/docs/forms.html'
445-
# session.all(:css, 'h2#controlled-components ~ p a', text: 'Try it on CodePen')[0].click
446-
# copied into local view
444+
447445
session.visit 'react'
448-
# Not necessary when accessed locally
449-
# session.within_frame(:css, 'iframe.result-iframe:not([src=""])', wait: 10) do
446+
450447
session.fill_in('Name:', with: 'abc')
451448
session.accept_prompt 'A name was submitted: abc' do
452449
session.click_button('Submit')
453450
end
451+
454452
session.fill_in('Name:', with: '')
455453
session.accept_prompt(/A name was submitted: $/) do
456454
session.click_button('Submit')
457455
end
458-
# end
456+
end
457+
458+
it 'works with rapid fill' do
459+
skip "This test doesn't support older browsers" if ie?(session)
460+
461+
session.visit 'react'
462+
long_string = (0...60).map { |i| ((i % 26) + 65).chr }.join
463+
464+
session.fill_in('Name:', with: long_string)
465+
session.accept_prompt "A name was submitted: #{long_string}" do
466+
session.click_button('Submit')
467+
require 'byebug'
468+
byebug
469+
end
459470
end
460471
end
461472
end

0 commit comments

Comments
 (0)