[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Watir - determine order of the controls

Patrick Spence

10/26/2006 6:18:00 PM

I've written a ScreenScraper class that "harvests" all the HTML
elements; textfields, checkboxes, radiobuttons, etc., from a web page
and populates a SQL Server table. This is a process needed to fully
automate the testing of a ASP.NET app from a data-driven approach. The
problem is that the developers that wrote the app did not use the
"tabindex" property on any of the controls. Had they done so, the
ScreenScraper class could've collected that information as well and we'd
know in what order the controls have to be populated. Although it's a
valid test, under normal circumstances you wouldn't want to click the
"Login" button until both a username and password are provided.

My question... Is there a way to collect a list of all the controls on a
page _in the order they appear on the screen_? I suspect drilling into
the DOM is going to be part of the solution. Just wondering if someone
else has run into this issue and what they did to resolve it. No sense
in re-inventing the wheel.

An alternative would be a Ruby script that records the mouse clicks as
each control is clicked, stuffing the "taborder" into a table, or some
such.

Thanks!

--
Posted via http://www.ruby-....

6 Answers

Alex LeDonne

10/26/2006 9:18:00 PM

0

On 10/26/06, Patrick Spence <patrick@pkspence.com> wrote:
> I've written a ScreenScraper class that "harvests" all the HTML
> elements; textfields, checkboxes, radiobuttons, etc., from a web page
> and populates a SQL Server table. This is a process needed to fully
> automate the testing of a ASP.NET app from a data-driven approach. The
> problem is that the developers that wrote the app did not use the
> "tabindex" property on any of the controls. Had they done so, the
> ScreenScraper class could've collected that information as well and we'd
> know in what order the controls have to be populated. Although it's a
> valid test, under normal circumstances you wouldn't want to click the
> "Login" button until both a username and password are provided.
>
> My question... Is there a way to collect a list of all the controls on a
> page _in the order they appear on the screen_? I suspect drilling into
> the DOM is going to be part of the solution. Just wondering if someone
> else has run into this issue and what they did to resolve it. No sense
> in re-inventing the wheel.
>
> An alternative would be a Ruby script that records the mouse clicks as
> each control is clicked, stuffing the "taborder" into a table, or some
> such.
>
> Thanks!

I don't think this is a well-defined problem. The order in which
fields appear on screen is not deterministic with respect to the
source document; it can be affected by CSS and even by the user agent
(it's possible to have field A below field B in Firefox, but above in
Internet Explorer). Considering tables & columns, even "before" and
"after" become ambiguous... how would you order the fields in the
following HTML table, with respect to screen layout?

<form>
<table>
<tr>
<td><input type="text" name="field_0"/></td>
<td rowspan=2><input type="text" name="field_center"/></td>
<td><input type="text" name="field_R"/></td>
</tr>
<tr>
<td><input type="text" name="field__"/></td>
<td><input type="text" name="field_5"/></td>
</tr>
</table>
</form>

You'll probably need to explicitly define dependencies based on the field names.

-Alex

Patrick Spence

10/26/2006 9:57:00 PM

0

Alex LeDonne wrote:
> On 10/26/06, Patrick Spence <patrick@pkspence.com> wrote:
>>
>> Thanks!
> I don't think this is a well-defined problem. The order in which
> fields appear on screen is not deterministic with respect to the
> source document; it can be affected by CSS and even by the user agent
> (it's possible to have field A below field B in Firefox, but above in
> Internet Explorer). Considering tables & columns, even "before" and
> "after" become ambiguous... how would you order the fields in the
> following HTML table, with respect to screen layout?
<snip>
If you're referring to my question, I thought it the problem was defined
quite clearly; here's what I have, here's what I need, how do I get
there?

As to CSS affecting the layout, you're absolutely correct. The more I
think about this, I believe my "alternative" approach would be a better
solution. Even though it will involve someone going thru each page of
the app and clicking on the controls *in the proper order*. However,
this will only have to be done once as the "click order", or "taborder",
will be written to a SQL Server table upon each mouse click. This sounds
like a really interesting project!

--
Posted via http://www.ruby-....

Alex LeDonne

10/27/2006 3:07:00 PM

0

On 10/26/06, Patrick Spence <patrick@pkspence.com> wrote:
> Alex LeDonne wrote:
> > On 10/26/06, Patrick Spence <patrick@pkspence.com> wrote:
> >>
> >> Thanks!
> > I don't think this is a well-defined problem. The order in which
> > fields appear on screen is not deterministic with respect to the
> > source document; it can be affected by CSS and even by the user agent
> > (it's possible to have field A below field B in Firefox, but above in
> > Internet Explorer). Considering tables & columns, even "before" and
> > "after" become ambiguous... how would you order the fields in the
> > following HTML table, with respect to screen layout?
> <snip>
> If you're referring to my question, I thought it the problem was defined
> quite clearly; here's what I have, here's what I need, how do I get
> there?
>
> As to CSS affecting the layout, you're absolutely correct. The more I
> think about this, I believe my "alternative" approach would be a better
> solution. Even though it will involve someone going thru each page of
> the app and clicking on the controls *in the proper order*. However,
> this will only have to be done once as the "click order", or "taborder",
> will be written to a SQL Server table upon each mouse click. This sounds
> like a really interesting project!

Sorry if I was unlear; your description was well-stated, I was saying
that your core question, "Is there a way to collect a list of all the
controls on a page _in the order they appear on the screen_?" is not
well-defined, because the order in which controls appear on the screen
is not well-defined given a source document.

Your "record-the-order" plan sounds like a good one.

Good luck!

-A

Chris McMahon

10/27/2006 8:24:00 PM

0


> As to CSS affecting the layout, you're absolutely correct. The more I
> think about this, I believe my "alternative" approach would be a better
> solution. Even though it will involve someone going thru each page of
> the app and clicking on the controls *in the proper order*. However,
> this will only have to be done once as the "click order", or "taborder",
> will be written to a SQL Server table upon each mouse click. This sounds
> like a really interesting project!

I wouldn't be too hasty, there, those controls are going to change over
time, breaking both your scripts and your database records.

I've built a number of these sorts of things, and I find that it is
better to define sets of paths through the application that accomplish
particular objectives, as opposed to testing widget-by-widget.

Chris McMahon

10/27/2006 9:43:00 PM

0


> As to CSS affecting the layout, you're absolutely correct. The more I
> think about this, I believe my "alternative" approach would be a better
> solution. Even though it will involve someone going thru each page of
> the app and clicking on the controls *in the proper order*. However,
> this will only have to be done once as the "click order", or "taborder",
> will be written to a SQL Server table upon each mouse click. This sounds
> like a really interesting project!

I wouldn't be too hasty, there, those controls are going to change over
time, breaking both your scripts and your database records.

I've built a number of these sorts of things, and I find that it is
better to define sets of paths through the application that accomplish
particular objectives, as opposed to testing widget-by-widget.

kohljonathan

10/28/2006 12:38:00 AM

0

> I wouldn't be too hasty, there, those controls are going to change over
> time, breaking both your scripts and your database records.
>
> I've built a number of these sorts of things, and I find that it is
> better to define sets of paths through the application that accomplish
> particular objectives, as opposed to testing widget-by-widget.

Chris has a good point. Furthermore, most modern browsers "fix" HTML,
by adding missing tags, etc. Testing that the HTML elements are correct
might be better done at the HTTP layer.

Hope that helps.

-Jonathan