watir 6.19.1 → 7.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/.github/actions/install-chrome/action.yml +1 -0
  3. data/.github/actions/setup-linux/action.yml +8 -0
  4. data/.github/workflows/tests.yml +100 -0
  5. data/CHANGES.md +7 -0
  6. data/README.md +1 -4
  7. data/Rakefile +1 -1
  8. data/lib/watir.rb +1 -45
  9. data/lib/watir/alert.rb +3 -8
  10. data/lib/watir/capabilities.rb +54 -230
  11. data/lib/watir/cell_container.rb +4 -4
  12. data/lib/watir/container.rb +4 -26
  13. data/lib/watir/elements/checkbox.rb +4 -4
  14. data/lib/watir/elements/date_field.rb +4 -4
  15. data/lib/watir/elements/date_time_field.rb +4 -4
  16. data/lib/watir/elements/element.rb +12 -49
  17. data/lib/watir/elements/file_field.rb +4 -4
  18. data/lib/watir/elements/font.rb +4 -4
  19. data/lib/watir/elements/hidden.rb +4 -4
  20. data/lib/watir/elements/html_elements.rb +444 -445
  21. data/lib/watir/elements/iframe.rb +4 -4
  22. data/lib/watir/elements/radio.rb +4 -4
  23. data/lib/watir/elements/select.rb +12 -78
  24. data/lib/watir/elements/svg_elements.rb +96 -96
  25. data/lib/watir/elements/text_field.rb +4 -4
  26. data/lib/watir/generator/base/generator.rb +4 -4
  27. data/lib/watir/generator/base/visitor.rb +0 -29
  28. data/lib/watir/generator/html/generator.rb +2 -1
  29. data/lib/watir/has_window.rb +4 -4
  30. data/lib/watir/http_client.rb +0 -8
  31. data/lib/watir/locators.rb +1 -5
  32. data/lib/watir/locators/button/matcher.rb +0 -23
  33. data/lib/watir/locators/button/selector_builder/xpath.rb +4 -15
  34. data/lib/watir/locators/element/matcher.rb +4 -19
  35. data/lib/watir/locators/element/selector_builder.rb +2 -37
  36. data/lib/watir/locators/element/selector_builder/xpath.rb +26 -41
  37. data/lib/watir/radio_set.rb +2 -2
  38. data/lib/watir/row_container.rb +4 -4
  39. data/lib/watir/version.rb +1 -1
  40. data/lib/watir/wait.rb +4 -74
  41. data/lib/watir/window.rb +6 -22
  42. data/lib/watir/window_collection.rb +5 -49
  43. data/lib/watirspec/implementation.rb +4 -0
  44. data/spec/spec_helper.rb +2 -7
  45. data/spec/unit/capabilities_spec.rb +196 -929
  46. data/spec/unit/match_elements/button_spec.rb +0 -13
  47. data/spec/unit/match_elements/element_spec.rb +38 -47
  48. data/spec/unit/match_elements/text_field_spec.rb +6 -6
  49. data/spec/unit/selector_builder/element_spec.rb +6 -23
  50. data/spec/unit/selector_builder/text_field_spec.rb +6 -7
  51. data/spec/watirspec/alert_spec.rb +4 -21
  52. data/spec/watirspec/browser_spec.rb +2 -2
  53. data/spec/watirspec/cookies_spec.rb +1 -1
  54. data/spec/watirspec/elements/button_spec.rb +0 -10
  55. data/spec/watirspec/elements/checkbox_spec.rb +10 -22
  56. data/spec/watirspec/elements/div_spec.rb +4 -34
  57. data/spec/watirspec/elements/divs_spec.rb +2 -2
  58. data/spec/watirspec/elements/element_spec.rb +38 -84
  59. data/spec/watirspec/elements/form_spec.rb +2 -4
  60. data/spec/watirspec/elements/links_spec.rb +4 -4
  61. data/spec/watirspec/elements/select_list_spec.rb +7 -108
  62. data/spec/watirspec/elements/span_spec.rb +2 -2
  63. data/spec/watirspec/elements/spans_spec.rb +1 -1
  64. data/spec/watirspec/elements/strong_spec.rb +1 -1
  65. data/spec/watirspec/html/non_control_elements.html +8 -3
  66. data/spec/watirspec/support/rspec_matchers.rb +1 -32
  67. data/spec/watirspec/window_switching_spec.rb +2 -49
  68. data/spec/watirspec_helper.rb +6 -1
  69. data/watir.gemspec +3 -4
  70. metadata +11 -32
  71. data/.github/workflows/linux.yml +0 -61
  72. data/.github/workflows/mac.yml +0 -55
  73. data/.github/workflows/unit.yml +0 -37
  74. data/.github/workflows/windows.yml +0 -39
  75. data/lib/watir/legacy_wait.rb +0 -123
  76. data/spec/unit/container_spec.rb +0 -35
  77. data/spec/watirspec/legacy_wait_spec.rb +0 -216
@@ -19,6 +19,9 @@ describe 'Div' do
19
19
  expect(browser.div(xpath: "//div[@id='header']")).to exist
20
20
  expect(browser.div(custom_attribute: 'custom')).to exist
21
21
  expect(browser.div(custom_attribute: /custom/)).to exist
22
+ expect(browser.div(text: /some visible/)).to exist
23
+ expect(browser.div(text: /some (visible|Jeff)/)).to exist
24
+ expect(browser.div(text: /none visible/)).to exist
22
25
  end
23
26
 
24
27
  it 'returns the first div if given no args' do
@@ -34,6 +37,7 @@ describe 'Div' do
34
37
  expect(browser.div(text: /no_such_text/)).to_not exist
35
38
  expect(browser.div(class: 'no_such_class')).to_not exist
36
39
  expect(browser.div(class: /no_such_class/)).to_not exist
40
+ expect(browser.div(text: /some visible some hidden/)).to exist
37
41
  expect(browser.div(index: 1337)).to_not exist
38
42
  expect(browser.div(xpath: "//div[@id='no_such_id']")).to_not exist
39
43
  end
@@ -126,40 +130,6 @@ describe 'Div' do
126
130
  end
127
131
  end
128
132
 
129
- describe 'Deprecation Warnings' do
130
- describe 'text locator with RegExp values' do
131
- it 'does not throw deprecation when still matched by text content' do
132
- expect { browser.div(text: /some visible/).locate }.not_to have_deprecated_text_regexp
133
- end
134
-
135
- it 'does not throw deprecation with complex regexp matched by text content' do
136
- expect { browser.div(text: /some (in|)visible/).locate }.not_to have_deprecated_text_regexp
137
- end
138
-
139
- not_compliant_on :watigiri do
140
- bug 'Safari is not filtering out hidden text', :safari do
141
- it 'throws deprecation when no longer matched by text content' do
142
- expect { browser.div(text: /some visible$/).locate }.to have_deprecated_text_regexp
143
- end
144
- end
145
- end
146
-
147
- not_compliant_on :watigiri do
148
- it 'does not throw deprecation when element does not exist' do
149
- expect { browser.div(text: /definitely not there/).locate }.not_to have_deprecated_text_regexp
150
- end
151
- end
152
-
153
- not_compliant_on :watigiri do
154
- bug 'Safari is not filtering out hidden text', :safari do
155
- it 'does not locate entire content with regular expressions' do
156
- expect(browser.div(text: /some visible some hidden/)).to_not exist
157
- end
158
- end
159
- end
160
- end
161
- end
162
-
163
133
  # Manipulation methods
164
134
  describe '#click' do
165
135
  it 'fires events when clicked' do
@@ -13,7 +13,7 @@ describe 'Divs' do
13
13
 
14
14
  describe '#length' do
15
15
  it 'returns the number of divs' do
16
- expect(browser.divs.length).to eq 16
16
+ expect(browser.divs.length).to eq 20
17
17
  end
18
18
  end
19
19
 
@@ -29,7 +29,7 @@ describe 'Divs' do
29
29
  end
30
30
 
31
31
  it 'returns an array of divs with a given range including negative values' do
32
- divs = browser.divs[11..-3]
32
+ divs = browser.divs[11..-7]
33
33
  ids = divs.map(&:id)
34
34
  expect(ids).to eq %w[messages ins_tag_test del_tag_test]
35
35
  end
@@ -20,12 +20,6 @@ describe 'Element' do
20
20
  expect { Watir::Element.new(container, 1, 2, 3, 4) }.to raise_error(ArgumentError)
21
21
  expect { Watir::Element.new(container, 'foo') }.to raise_error(ArgumentError)
22
22
  end
23
-
24
- it 'throws deprecation warning when combining element locator with other locators' do
25
- element = double Selenium::WebDriver::Element
26
- allow(element).to receive(:enabled?).and_return(true)
27
- expect { browser.text_field(class_name: 'name', index: 1, element: element) }.to have_deprecated_element_cache
28
- end
29
23
  end
30
24
 
31
25
  describe '#element_call' do
@@ -40,13 +34,11 @@ describe 'Element' do
40
34
  expect { element.text }.to_not raise_error
41
35
  end
42
36
 
43
- compliant_on :relaxed_locate do
44
- it 'relocates stale element when taking an action on it' do
45
- browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
46
- element = browser.text_field(id: 'new_user_first_name').locate
47
- browser.refresh
48
- expect { element.click }.not_to raise_exception
49
- end
37
+ it 'relocates stale element when taking an action on it' do
38
+ browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
39
+ element = browser.text_field(id: 'new_user_first_name').locate
40
+ browser.refresh
41
+ expect { element.click }.not_to raise_exception
50
42
  end
51
43
  end
52
44
 
@@ -229,56 +221,6 @@ describe 'Element' do
229
221
  end
230
222
  end
231
223
 
232
- describe '#visible?' do
233
- it 'returns true if the element is visible' do
234
- msg = /WARN Watir \["visible_element"\]/
235
- expect {
236
- expect(browser.text_field(id: 'new_user_email')).to be_visible
237
- }.to output(msg).to_stdout_from_any_process
238
- end
239
-
240
- it 'raises UnknownObjectException exception if the element does not exist' do
241
- msg = /WARN Watir \["visible_element"\]/
242
- expect {
243
- expect { browser.text_field(id: 'no_such_id').visible? }.to raise_unknown_object_exception
244
- }.to output(msg).to_stdout_from_any_process
245
- end
246
-
247
- it 'handles staleness' do
248
- element = browser.text_field(id: 'new_user_email').locate
249
-
250
- allow(element).to receive(:stale?).and_return(true)
251
-
252
- expect(element).to be_visible
253
- end
254
-
255
- it "returns true if the element has style='visibility: visible' even if parent has style='visibility: hidden'" do
256
- msg = /WARN Watir \["visible_element"\]/
257
- expect {
258
- expect(browser.div(id: 'visible_child')).to be_visible
259
- }.to output(msg).to_stdout_from_any_process
260
- end
261
-
262
- it "returns false if the element is input element where type eq 'hidden'" do
263
- expect(browser.hidden(id: 'new_user_interests_dolls')).to_not be_visible
264
- end
265
-
266
- it "returns false if the element has style='display: none;'" do
267
- msg = /WARN Watir \["visible_element"\]/
268
- expect {
269
- expect(browser.div(id: 'changed_language')).to_not be_visible
270
- }.to output(msg).to_stdout_from_any_process
271
- end
272
-
273
- it "returns false if the element has style='visibility: hidden;" do
274
- expect { expect(browser.div(id: 'wants_newsletter')).to_not be_visible }
275
- end
276
-
277
- it 'returns false if one of the parent elements is hidden' do
278
- expect { expect(browser.div(id: 'hidden_parent')).to_not be_visible }
279
- end
280
- end
281
-
282
224
  describe '#cache=' do
283
225
  it 'bypasses selector location' do
284
226
  browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
@@ -307,14 +249,36 @@ describe 'Element' do
307
249
  browser.goto WatirSpec.url_for('removed_element.html')
308
250
  end
309
251
 
310
- it 'handles staleness in a collection' do
252
+ it 'element from a collection is re-looked up after it becomes stale' do
311
253
  element = browser.divs(id: 'text').first.locate
312
254
 
313
- allow(element).to receive(:stale?).and_return(true)
255
+ browser.refresh
314
256
 
257
+ expect(element).to be_stale
315
258
  expect(element).to exist
316
259
  end
317
260
 
261
+ it 'element from a selenium element throws an exception when relocated' do
262
+ div = browser.div.locate
263
+ element = browser.element(element: div.wd)
264
+
265
+ browser.refresh
266
+ expect(element).to be_stale
267
+
268
+ msg = 'Can not relocate a Watir element initialized by a Selenium element'
269
+ expect { element.exists? }.to raise_exception(Watir::Exception::LocatorException, msg)
270
+ end
271
+
272
+ it 'element from a selenium element with other locators throws an exception' do
273
+ div = browser.div.locate
274
+ element = browser.element(element: div.wd, id: 'foo')
275
+
276
+ browser.refresh
277
+
278
+ msg = 'Can not relocate a Watir element initialized by a Selenium element'
279
+ expect { element.exists? }.to raise_exception(Watir::Exception::LocatorException, msg)
280
+ end
281
+
318
282
  it 'returns false when tag name does not match id' do
319
283
  watir_element = browser.span(id: 'text')
320
284
  expect(watir_element).to_not exist
@@ -374,6 +338,15 @@ describe 'Element' do
374
338
  expect(element).to be_stale
375
339
  end
376
340
 
341
+ it 'returns true the second time if the element is stale' do
342
+ element = browser.div.locate
343
+
344
+ browser.refresh
345
+
346
+ expect(element).to be_stale
347
+ expect(element).to be_stale
348
+ end
349
+
377
350
  it 'returns false if the element is not stale' do
378
351
  element = browser.button(name: 'new_user_submit_disabled').locate
379
352
 
@@ -677,25 +650,6 @@ describe 'Element' do
677
650
  end
678
651
  end
679
652
 
680
- describe '#scroll_into_view' do
681
- it 'scrolls element into view' do
682
- initial_size = browser.window.size
683
- browser.window.resize_to(initial_size.width, 800)
684
-
685
- el = browser.button(name: 'new_user_image')
686
- element_center = el.center['y']
687
-
688
- bottom_viewport_script = 'return window.pageYOffset + window.innerHeight'
689
- expect(browser.execute_script(bottom_viewport_script)).to be < element_center
690
-
691
- expect {
692
- expect(el.scroll_into_view).to be_a Selenium::WebDriver::Point
693
- }.to have_deprecated_scroll_into_view
694
-
695
- expect(browser.execute_script(bottom_viewport_script)).to be > element_center
696
- end
697
- end
698
-
699
653
  describe '#location' do
700
654
  it 'returns coordinates for element location' do
701
655
  location = browser.button(name: 'new_user_image').location
@@ -59,10 +59,8 @@ describe 'Form' do
59
59
  expect(messages[0]).to eq 'submit'
60
60
  end
61
61
 
62
- compliant_on :relaxed_locate do
63
- it 'times out when submitting an element that is not displayed' do
64
- expect { browser.form(name: 'no').submit }.to raise_unknown_object_exception
65
- end
62
+ it 'times out when submitting an element that is not displayed' do
63
+ expect { browser.form(name: 'no').submit }.to raise_unknown_object_exception
66
64
  end
67
65
  end
68
66
  end
@@ -43,7 +43,7 @@ describe 'Links' do
43
43
  describe 'visible text' do
44
44
  it 'finds links by visible text' do
45
45
  browser.goto WatirSpec.url_for('non_control_elements.html')
46
- container = browser.div(id: 'visible_text')
46
+ container = browser.div(id: 'visible_link')
47
47
  expect(container.links(visible_text: 'all visible').count).to eq(1)
48
48
  expect(container.links(visible_text: /all visible/).count).to eq(1)
49
49
  expect(container.links(visible_text: /some visible/).count).to eq(1)
@@ -54,9 +54,9 @@ describe 'Links' do
54
54
  browser.goto WatirSpec.url_for('non_control_elements.html')
55
55
  container = browser.div(id: 'visible_text')
56
56
 
57
- expect(container.links(visible_text: 'some visible').count).to eq(1)
58
- expect(container.links(visible_text: 'none visible').count).to eq(0)
59
- expect(container.links(visible_text: /none visible/).count).to eq(0)
57
+ expect(container.divs(visible_text: 'some visible').count).to eq(1)
58
+ expect(container.divs(visible_text: 'none visible').count).to eq(0)
59
+ expect(container.divs(visible_text: /none visible/).count).to eq(0)
60
60
  end
61
61
  end
62
62
  end
@@ -254,10 +254,8 @@ describe 'SelectList' do
254
254
 
255
255
  it 'selects an option with a Regexp' do
256
256
  browser.select_list(name: 'new_user_languages').clear
257
- expect {
258
- browser.select_list(name: 'new_user_languages').select(/1|3/)
259
- }.to have_deprecated_select_by
260
- expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq %w[Danish NO]
257
+ browser.select_list(name: 'new_user_languages').select(/2|3/)
258
+ expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq %w[EN]
261
259
  end
262
260
  end
263
261
 
@@ -329,13 +327,11 @@ describe 'SelectList' do
329
327
  browser.select_list(id: 'single-quote').select("'foo'")
330
328
  end
331
329
 
332
- compliant_on :relaxed_locate do
333
- it 'waits to select an option' do
334
- browser.goto WatirSpec.url_for('wait.html')
335
- browser.a(id: 'add_select').click
336
- select_list = browser.select_list(id: 'languages')
337
- expect { select_list.select('No') }.to wait_and_raise_no_value_found_exception
338
- end
330
+ it 'waits to select an option' do
331
+ browser.goto WatirSpec.url_for('wait.html')
332
+ browser.a(id: 'add_select').click
333
+ select_list = browser.select_list(id: 'languages')
334
+ expect { select_list.select('No') }.to wait_and_raise_no_value_found_exception
339
335
  end
340
336
 
341
337
  it "raises NoValueFoundException if the option doesn't exist" do
@@ -554,101 +550,4 @@ describe 'SelectList' do
554
550
  end
555
551
  end
556
552
  end
557
-
558
- describe '#select_all' do
559
- it 'selects multiple options based on text' do
560
- browser.select_list(name: 'new_user_languages').clear
561
- expect {
562
- browser.select_list(name: 'new_user_languages').select_all(/ish/)
563
- }.to have_deprecated_select_all
564
- list = %w[Danish EN Swedish]
565
- expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
566
- end
567
-
568
- it 'selects multiple options based on labels' do
569
- browser.select_list(name: 'new_user_languages').clear
570
- expect {
571
- browser.select_list(name: 'new_user_languages').select_all(/NO|EN/)
572
- }.to have_deprecated_select_all
573
- list = %w[EN NO]
574
- expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
575
- end
576
-
577
- it 'selects all options in an Array' do
578
- browser.select_list(name: 'new_user_languages').clear
579
- expect {
580
- browser.select_list(name: 'new_user_languages').select_all([/ish/, /Latin/])
581
- }.to have_deprecated_select_all
582
- list = ['Danish', 'EN', 'Swedish', 'Azeri - Latin', 'Latin']
583
- expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
584
- end
585
-
586
- it 'selects all options in a parameter list' do
587
- browser.select_list(name: 'new_user_languages').clear
588
- expect {
589
- browser.select_list(name: 'new_user_languages').select_all(/ish/, /Latin/)
590
- }.to have_deprecated_select_all
591
- list = ['Danish', 'EN', 'Swedish', 'Azeri - Latin', 'Latin']
592
- expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
593
- end
594
-
595
- it 'returns the first matching value if there are multiple matches' do
596
- expect {
597
- expect(browser.select_list(name: 'new_user_languages').select_all(/ish/)).to eq 'Danish'
598
- }.to have_deprecated_select_all
599
- end
600
- end
601
-
602
- describe '#select_all!' do
603
- it 'selects multiple options based on value' do
604
- browser.select_list(name: 'new_user_languages').clear
605
- expect {
606
- browser.select_list(name: 'new_user_languages').select_all!(/\d+/)
607
- }.to have_deprecated_select_all
608
- list = %w[Danish EN NO Russian]
609
- expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
610
- end
611
-
612
- it 'selects multiple options based on text' do
613
- browser.select_list(name: 'new_user_languages').clear
614
- expect {
615
- browser.select_list(name: 'new_user_languages').select_all!(/ish/)
616
- }.to have_deprecated_select_all
617
- list = %w[Danish EN Swedish]
618
- expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
619
- end
620
-
621
- it 'selects multiple options based on labels' do
622
- browser.select_list(name: 'new_user_languages').clear
623
- expect {
624
- browser.select_list(name: 'new_user_languages').select_all!(/NO|EN/)
625
- }.to have_deprecated_select_all
626
- list = %w[EN NO]
627
- expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
628
- end
629
-
630
- it 'selects all options in an Array' do
631
- browser.select_list(name: 'new_user_languages').clear
632
- expect {
633
- browser.select_list(name: 'new_user_languages').select_all!([/ish/, /Latin/])
634
- }.to have_deprecated_select_all
635
- list = ['Danish', 'EN', 'Swedish', 'Azeri - Latin', 'Latin']
636
- expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
637
- end
638
-
639
- it 'selects all options in a parameter list' do
640
- browser.select_list(name: 'new_user_languages').clear
641
- expect {
642
- browser.select_list(name: 'new_user_languages').select_all!(/ish/, /Latin/)
643
- }.to have_deprecated_select_all
644
- list = ['Danish', 'EN', 'Swedish', 'Azeri - Latin', 'Latin']
645
- expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
646
- end
647
-
648
- it 'returns the first matching value if there are multiple matches' do
649
- expect {
650
- expect(browser.select_list(name: 'new_user_languages').select_all!(/ish/)).to eq 'Danish'
651
- }.to have_deprecated_select_all
652
- end
653
- end
654
553
  end
@@ -17,8 +17,8 @@ describe 'Span' do
17
17
  expect(browser.span(xpath: "//span[@id='lead']")).to exist
18
18
  end
19
19
 
20
- it 'visible text is found by regular expression with text locator' do
21
- expect(browser.span(text: /Dubito, ergo cogito, ergo sum/)).to exist
20
+ it 'visible text is found by regular expression with visible text locator' do
21
+ expect(browser.span(visible_text: /Dubito, ergo cogito, ergo sum/)).to exist
22
22
  end
23
23
 
24
24
  it 'returns the first span if given no args' do
@@ -13,7 +13,7 @@ describe 'Spans' do
13
13
 
14
14
  describe '#length' do
15
15
  it 'returns the number of spans' do
16
- expect(browser.spans.length).to eq 7
16
+ expect(browser.spans.length).to eq 8
17
17
  end
18
18
  end
19
19
 
@@ -18,7 +18,7 @@ describe 'Strong' do
18
18
  end
19
19
 
20
20
  it 'visible text is found by regular expression with text locator' do
21
- expect(browser.strong(text: /Dubito, ergo cogito, ergo sum/)).to exist
21
+ expect(browser.strong(visible_text: /Dubito, ergo cogito, ergo sum/)).to exist
22
22
  end
23
23
 
24
24
  it 'returns the first strong if given no args' do
@@ -131,10 +131,15 @@
131
131
  <del class="footer" onclick="this.innerHTML = 'This is a del with text set by Javascript.'">This is a del.</del>
132
132
  </div>
133
133
  <div custom-attribute=custom>Custom</div>
134
+ <div id="visible_link">
135
+ <a id="all_visible_link">all visible</a>
136
+ <a id="some_visible_link">some visible<span style="display:none;"> some hidden</span></a>
137
+ <a id="no_visible_link" style="display:none;">none visible</a>
138
+ </div>
134
139
  <div id="visible_text">
135
- <a id="all_visible_text">all visible</a>
136
- <a id="some_visible_text">some visible<span style="display:none;"> some hidden</span></a>
137
- <a id="no_visible_text" style="display:none;">none visible</a>
140
+ <div id="all_visible_text">all visible</div>
141
+ <div id="some_visible_text">some visible<span style="display:none;"> some hidden</span></div>
142
+ <div id="no_visible_text" style="display:none;">none visible</div>
138
143
  </div>
139
144
  </body>
140
145
  </html>