2014-01-16 31 views
0

我正在使用ruby watir黄瓜框架。我从Excel中读取值,我的方案是如何停止从特定行的excel中读取数据并继续阅读相同的红宝石excel

Given i am logged in to the console 
When i navigate to the "report_link" Report page 
When i navigate to the "alert_link" Alerts page 

我一步定义

When(/^i navigate to the "(.*)" Report page$/) do |report_link| 
    book = Spreadsheet.open 'Test.xls' 
    sheet1 = book.worksheet 0 
    sheet1.each do |row| 
    break if row[0].nil? 
    puts row.join(',') 
    @browser.link(:href => row[0]).when_present.click 
    end 
end 

When(/^i navigate to the "(.*)" Alerts page$/) do |alert_link| 
    book = Spreadsheet.open 'Test.xls' 
    sheet1 = book.worksheet 0 
    sheet1.each 4 do |row| 
    break if row[5].nil? 
    puts row.join(',') 
    @browser.link(:href => row[5]).when_present.click 
    end 
end 

有我的excel两组HREF数据。我如何从同一个Excel中读取它?

+1

电子表格的外观如何 - 例如,您如何知道要读取哪些行? –

+0

该电子表格有一个有多行的列。第五个单元格是空的。我有一组hrefs从单元格1到4和一组hrefs从单元格6到8 –

+0

难道这听起来难以维护吗?为什么不使用列来标识链接类型或使用多个电子表格? –

回答

0

而不是使用行将列表分解为空行,它可能会更容易使用列。例如,列A具有报告链接,列B具有警报链接。

Spreadsheet允许您访问类似于使用行的列。例如,下面会给你的第一列:

sheet1.column(0) 

要获得所有值从柱,你可以做到以下几点:

sheet1.column(0).to_a.compact 
#=> Returns an array of cell values 

行(即长度数该列)基于最长的列。换句话说,较短的列将会有额外的空白值。 compact被添加删除这些。

上面的可以在你的脚步像使用:

When(/^i navigate to the "(.*)" Report page$/) do |report_link| 
    book = Spreadsheet.open 'Test.xls' 
    sheet1 = book.worksheet 0 

    urls = sheet1.column(0).to_a.compact 
    urls.each do |url| 
    @browser.link(:href => url).when_present.click 
    end 
end 

警报的步骤将是相似 - 只是改变了列索引。