# frozen_string_literal: true require 'watirspec_helper' describe 'TableBody' do before :each do browser.goto(WatirSpec.url_for('tables.html')) end describe '#exists?' do it 'returns true if the table body exists (page context)' do expect(browser.tbody(id: 'first')).to exist expect(browser.tbody(id: /first/)).to exist expect(browser.tbody(index: 0)).to exist expect(browser.tbody(xpath: "//tbody[@id='first']")).to exist end it 'returns true if the table body exists (table context)' do expect(browser.table(index: 0).tbody(id: 'first')).to exist expect(browser.table(index: 0).tbody(id: /first/)).to exist expect(browser.table(index: 0).tbody(index: 1)).to exist expect(browser.table(index: 0).tbody(xpath: "//tbody[@id='first']")).to exist end it 'returns the first table body if given no args' do expect(browser.table.tbody).to exist end it "returns false if the table body doesn't exist (page context)" do expect(browser.tbody(id: 'no_such_id')).to_not exist expect(browser.tbody(id: /no_such_id/)).to_not exist expect(browser.tbody(index: 1337)).to_not exist expect(browser.tbody(xpath: "//tbody[@id='no_such_id']")).to_not exist end it "returns false if the table body doesn't exist (table context)" do expect(browser.table(index: 0).tbody(id: 'no_such_id')).to_not exist expect(browser.table(index: 0).tbody(id: /no_such_id/)).to_not exist expect(browser.table(index: 0).tbody(index: 1337)).to_not exist expect(browser.table(index: 0).tbody(xpath: "//tbody[@id='no_such_id']")).to_not exist end it "raises TypeError when 'what' argument is invalid" do expect { browser.tbody(id: 3.14).exists? }.to raise_error(TypeError) expect { browser.table(index: 0).tbody(id: 3.14).exists? }.to raise_error(TypeError) end end describe '#[]', except: {browser: :safari, reason: 'Safari does not strip text'} do it 'returns the row at the given index (page context)' do expect(browser.tbody(id: 'first')[0].text).to eq 'March 2008' expect(browser.tbody(id: 'first')[1][0].text).to eq 'Gregory House' expect(browser.tbody(id: 'first')[2][0].text).to eq 'Hugh Laurie' end it 'returns the row at the given index (table context)' do expect(browser.table(index: 0).tbody(id: 'first')[0].text).to eq 'March 2008' expect(browser.table(index: 0).tbody(id: 'first')[1][0].text).to eq 'Gregory House' expect(browser.table(index: 0).tbody(id: 'first')[2][0].text).to eq 'Hugh Laurie' end end describe '#row' do it 'finds the first row matching the selector' do row = browser.tbody(id: 'first').row(id: 'gregory') expect(row.tag_name).to eq 'tr' expect(row.id).to eq 'gregory' end end describe '#rows' do it 'finds rows matching the selector' do rows = browser.tbody(id: 'first').rows(id: /h$/) expect(rows.size).to eq 2 expect(rows.first.id).to eq 'march' expect(rows.last.id).to eq 'hugh' end end describe '#strings' do it 'returns the text of child cells' do expect(browser.tbody(id: 'first').strings).to eq [ ['March 2008', '', '', ''], ['Gregory House', '5 934', '1 347', '4 587'], ['Hugh Laurie', '6 300', '1 479', '4 821'] ] end end end