问题
I have a table which might contain up to 50 rows and has 9 columns. However the code I am using to fill out data in the table its taking so long.
Is there a faster way of doing it? Here is my code
table = $browser.div(:id => "market").table(:id => 'tableTradeIndMarket')
i = 3 + rand(1..table.rows.length-4)
table.rows[i].cells[4].select_list.select 'Buy'
table.rows[i].cells[5].select_list.select 'Market'
table.rows[i].cells[6].text_field.set ($share)
table.rows[i+1].cells[4].select_list.select 'Buy'
table.rows[i+1].cells[5].select_list.select 'Limit'
table.rows[i+1].cells[6].text_field.set ($share)
//To take out dollar sign which is found on the second column and put that value in to another column of the same row
table.rows[i+1].cells[8].text_field.set(
table.rows[i+1].cells[2].text[1..table.rows[i+1].cells[2].text.length]
)
table.rows[i+1].cells[9].select_list.select 'Day'
table.rows[i+2].cells[4].select_list.select 'Buy'
table.rows[i+2].cells[5].select_list.select 'Stop'
table.rows[i+2].cells[6].text_field.set ($share)
table.rows[i+2].cells[7].text_field.set ( table.rows[i+2].cells[2].text[1..table.rows[i+2].cells[2].text.length])
table.rows[i+2].cells[9].select_list.select 'GTC'
table.rows[i+3].cells[4].select_list.select 'Buy'
table.rows[i+3].cells[5].select_list.select 'Stop/Limit'
table.rows[i+3].cells[6].text_field.set ($share)
table.rows[i+3].cells[7].text_field.set ( table.rows[i+3].cells[2].text[1..table.rows[i+3].cells[2].text.length])
table.rows[i+3].cells[8].text_field.set ( table.rows[i+3].cells[2].text[1..table.rows[i+3].cells[2].text.length])
table.rows[i+3].cells[9].select_list.select 'Day'
回答1:
Your best bet is likely to locate the row element with the help of Nokogiri. Željko Filipin had a good blog post about doing this - http://zeljkofilipin.com/watir-nokogiri
As an example, the inputting of your ith row would be:
row_css = Nokogiri::HTML(browser.html).at_css("table#tableTradeIndMarket tr:nth-of-type(#{i})").css_path
row = browser.element(:css, row_css).to_subtype
row.cells[4].select_list.select 'Buy'
row.cells[5].select_list.select 'Market'
row.cells[6].text_field.set ($share)
You could apply the same concept to the other rows that you are inputting.
This helped at least for the test table that I was using.
来源:https://stackoverflow.com/questions/14128901/a-better-way-of-iterating-and-filling-data-in-html-table-using-watir