Ian,

Sorry about the "rows" and "each_with_index" issues.  Hopefully
that'll teach me to test suggestions : )

table(:index,29) clearly does the same thing I thought
table(:index,29).rows does.

As for the "each_with_index", if you just mixin the Enumerable module
to the Watir::Table class like this:

class Watir::Table
  include Enumerable
end

before you use "each_with_index", then you should be in good shape.
This seems like something that should be added to the base Watir,
since rows in a table are generally an enumerable element and the
current Watir::Table.each method returns the rows of the table in
order.

Any objections?  If not, I'll open a ticket.

Ethan

On 5/7/07, Ian Webb <[EMAIL PROTECTED]> wrote:
> Thanks - this does look like a good approach. The table's layout doesn't
> change, it just reloads to update the data within the table with the
> entries that were just made in the popup window. It's a really annoying
> UI, especially when you have test cases that require changing a dozen
> rows and therefore opening the popup a dozen times.. hence why I'm quite
> eager to get Watir doing it instead.
>
> However, each_with_index appears to be an undefined method for ie.table
> objects. I can iterate on .each just fine, but .each_with_index is
> undefined. (.rows is undefined as well; .each works fine if I leave it
> out)
>
> I'm wondering if maybe there's a way to store the indices of the buttons
> it's going to click on within the array, rather than the rows
> themselves. I tried buttons_to_click << row[5].link(:index,1), but that
> doesn't work.
>
> Thanks,
> Ian
>
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of Ethan Jewett
> Sent: Saturday, May 05, 2007 6:55 PM
> To: [email protected]
> Subject: Re: [Wtr-general] Using an ie.table.each do |row| loop when
> thepage in the ie window refreshes itself
>
> Ian,
>
> Reloading probably invalidates the table object, resulting in your
> "Access denied" error when ruby goes back for the next row in the
> table.
>
> Suggestion:  Assuming that submitting and reloading doesn't affect the
> table layout, use rows.each_with_index to build an array of indices of
> relevant rows.  Then cycle through the array clicking and submitting.
> For instance (untested, unfortunately):
>
> rows_to_click = Array.new
>
> ie.table(:index, 29).rows.each_with_index do |row, i|
>   rows_to_click << i if (row[1].text =~ /#{journals}/) != nil
> end
>
> rows_to_click.each do |i|
>   [Do the clicking and such for row i here.]
> end
>
> This could be made substantially prettier, but hopefully it gets the job
> done.
>
> Ethan
>
> On 5/4/07, Ian Webb <[EMAIL PROTECTED]> wrote:
> > Here's the code snippet that's giving me problems:
> >
> >   ie.table(:index,29).each do |row|
> >     if (row[1].text =~ /#{journals}/) != nil then #If there is a match
> > for that regex
> >       row[5].link(:index,1).click # this makes the popup window appear
> >       cw = Watir::IE.attach(:title,'Popup Window') # attach to the
> popup
> > window
> >       doRolesPopup(cw) # fill out and submit the form
> >     end
> >   end
> >
> > doRolesPopup fills out a form in the cw page, then clicks submit. The
> > submit button submits the form, then closes the cw window and reloads
> > the ie window. This reload of the page referenced by the ie object
> > appears to break the row object, since I get the following error:
> >
> > c:/ruby/lib/ruby/site_ruby/1.8/watir.rb:2461:in `invoke': unknown
> > property or method `rows' (WIN32OLERuntimeError)
> >     HRESULT error code:0x80070005
> >       Access is denied. from
> > c:/ruby/lib/ruby/site_ruby/1.8/watir.rb:2461:in `row'
> >         from c:/ruby/lib/ruby/site_ruby/1.8/watir.rb:2404:in `each'
> >         from c:/ruby/lib/ruby/site_ruby/1.8/watir.rb:2404:in `upto'
> >         from c:/ruby/lib/ruby/site_ruby/1.8/watir.rb:2404:in `each'
> >         from assignroles.rb:51
> >         from c:/ruby/lib/ruby/1.8/csv.rb:532:in `parse'
> >         from c:/ruby/lib/ruby/1.8/csv.rb:560:in `each'
> >         from c:/ruby/lib/ruby/1.8/csv.rb:531:in `parse'
> >         from assignroles.rb:35
> >
> > Is there any way to keep this simple .each loop, or do I need to work
> > around it?
> >
> > Thanks,
> > Ian
> > _______________________________________________
> > Wtr-general mailing list
> > [email protected]
> > http://rubyforge.org/mailman/listinfo/wtr-general
> >
> _______________________________________________
> Wtr-general mailing list
> [email protected]
> http://rubyforge.org/mailman/listinfo/wtr-general
> _______________________________________________
> Wtr-general mailing list
> [email protected]
> http://rubyforge.org/mailman/listinfo/wtr-general
>
_______________________________________________
Wtr-general mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/wtr-general

Reply via email to