require 'watirspec_helper' describe 'Collections' do it 'returns inner elements of parent element having different html tag' do browser.goto(WatirSpec.url_for('collections.html')) expect(browser.span(id: 'a_span').divs.size).to eq 2 end it 'returns inner elements of parent element having same html tag' do browser.goto(WatirSpec.url_for('collections.html')) expect(browser.span(id: 'a_span').spans.size).to eq 2 end it 'returns correct subtype of elements' do browser.goto(WatirSpec.url_for('collections.html')) collection = browser.span(id: 'a_span').spans expect(collection.all? { |el| el.is_a? Watir::Span }).to eq true end it 'can contain more than one type of element' do browser.goto(WatirSpec.url_for('nested_elements.html')) collection = browser.div(id: 'parent').children expect(collection.any? { |el| el.is_a? Watir::Span }).to eq true expect(collection.any? { |el| el.is_a? Watir::Div }).to eq true end it 'relocates the same element' do browser.goto(WatirSpec.url_for('nested_elements.html')) collection = browser.div(id: 'parent').children tag = collection[3].tag_name browser.refresh expect(collection[3].tag_name).to eq tag end it 'returns value for #empty?' do browser.goto(WatirSpec.url_for('collections.html')) expect(browser.span(id: 'a_span').options.empty?).to eq true end it 'returns value for #any?' do browser.goto(WatirSpec.url_for('collections.html')) expect(browser.span(id: 'a_span').spans.any?).to eq true end it 'locates elements' do browser.goto(WatirSpec.url_for('collections.html')) spans = browser.span(id: 'a_span').spans expect(spans).to receive(:elements).and_return([]) expect(spans.locate).to be_a Watir::SpanCollection end it 'lazy loads collections referenced with #[]' do browser.goto(WatirSpec.url_for('collections.html')) expect(browser.wd).to_not receive(:find_elements) browser.spans[3] end it 'does not relocate collections when previously evaluated' do browser.goto(WatirSpec.url_for('collections.html')) elements = browser.spans.tap(&:to_a) expect(browser.wd).to_not receive(:find_elements) elements[1].id end it 'relocates cached elements that go stale' do browser.goto(WatirSpec.url_for('collections.html')) elements = browser.spans.tap(&:to_a) browser.refresh expect(elements[1]).to be_stale expect { elements[1] }.to_not raise_unknown_object_exception end end