[jawsscripts] Re: The GetListOfFormFields function annd Delimiters

  • From: "Donald Marang" <donald.marang@xxxxxxxxx>
  • To: <jawsscripts@xxxxxxxxxxxxx>
  • Date: Fri, 18 Sep 2009 19:32:47 -0400

Thanks Brian,

I ended up using your method in a function that gathers all of the 
information I was looking for at one time.  I now use this loop starting at 
the last element and working backwards.  While in the loop, I count the 
buttons, and password / edit fields on the page. It passes back the Edit 
Field count, the  name of the first edit field, the count of buttons, and 
returns the object pointer of the first button as the return value.

I could not figure out how to identify an Edit field.  The Edit fields 
sometimes only have a name attribute.  Currently the function only 
identifies the username and search edit fields by name!  Not a 
generic,portable solution.  Does anyone know a better way to identify an 
Edit field? Would there be an attribute that would always be null in a form, 
but all other control types in the form     would return something?

Perhaps I should just pass back the object pointer of the first Edit field 
as well and return all information as parameters by reference to make it 
more generic.  That way it might be more useful in other cases.  As it is, I 
call this function 3 times in this application.  I will paste the function 
below in case anyone is interested.  I welcome all comments so that I can 
eventually learn how to script right.
Object Function FieldInfo (int ByRef iFields, string ByRef sFirstEdit, int 
ByRef iButtons)
Var
 Object dom,
 Object array,
 Object o,
 Int l,
 Int i,
 Object oEdit,
 Object oButton,
 String sName
let dom = IEGetCurrentDocument()
let array = dom.getElementsByTagName("input")
Let l = array.length
let i = l
Let iFields = 0
Let iButtons = 0
SayMessage (OT_DEBUG, "length = " + IntToString (l))
while i >= 0
 let o = array(i)
 if o.type == "password" then
  SayMessage (OT_DEBUG, "password field found!  i = " + IntToString (i))
  Let iFields = iFields + 1
  Let oEdit = o
  Let sFirstEdit = o.name
 ElIf o.class == "actionbutton" then
  SayMessage (OT_DEBUG, "Action button found!  i = " + IntToString (i))
  Let sName = o.value
  SayMessage (OT_DEBUG, "value = " + sName)
  Let iButtons = iButtons + 1
  Let oButton = o
 ElIf o.type == "image" then
  SayMessage (OT_DEBUG, "Button Image found!  i = " + IntToString (i))
  Let sName = o.value
  SayMessage (OT_DEBUG, "value = " + sName)
  Let iButtons = iButtons + 1
  Let oButton = o
 ElIf o.name == "userName" then
  SayMessage (OT_DEBUG, "Username field found!  i = " + IntToString (i))
  Let iFields = iFields + 1
  Let oEdit = o
  Let sFirstEdit = o.name
 ElIf o.name == "testInput" then
  SayMessage (OT_DEBUG, "Search field found!  i = " + IntToString (i))
  Let iFields = iFields + 1
  Let oEdit = o
  Let sFirstEdit = o.name
 endif
 Let i = i - 1
EndWhile
SayMessage (OT_DEBUG, "Edit field count = " + IntToString (iFields))
SayMessage (OT_DEBUG, "First Edit field = " + sFirstEdit)
SayMessage (OT_DEBUG, "Button count = " + IntToString (iButtons))
Let sName = oButton.value
SayMessage (OT_DEBUG, "Button value = " + sName)
Return oButton
EndFunction
Don Marang

----- Original Message ----- 
From: "Bryan Garaventa" <bgaraventa11@xxxxxxxxxxxxxx>
To: <jawsscripts@xxxxxxxxxxxxx>
Sent: Tuesday, September 15, 2009 7:17 PM
Subject: [jawsscripts] Re: The GetListOfFormFields function annd Delimiters


> You could do something like the following to loop through all relevant
> password form fields...
>
> var object dom, object array, object o, int i
> let dom = IEGetCurrentDocument()
> let array = dom.getElementsByTagName("input")
> let i = 0
> while(i < array.length)
> let o = array(i)
> if o.type == "password" then
>
> ; here is each instance of a password field within the o object.
>
> endif
> let i = i + 1
> endWhile
>
> ----- Original Message ----- 
> From: "Donald Marang" <donald.marang@xxxxxxxxx>
> To: <jawsscripts@xxxxxxxxxxxxx>
> Sent: Tuesday, September 15, 2009 2:58 PM
> Subject: [jawsscripts] The GetListOfFormFields function annd Delimiters
>
>
>>I have been attempting to determine the number of Edit fields on a web
>>page.  I have tried to pull that information from the DOM, but I am not
>>grasping how to create a collection of edit / password fields.  As a
>>backup, I attempted to use the GetListOfFormFields function.  I can use
>>this function and then pass the returned string to the
>> DlgSelectItemInList  function without any problems.  The
>> DlgSelectItemInList  function will display the list showing and 
>> separating
>> the segments properly.  However, the GetListOfFormFields function has a
>> delimeter as the first parameter, it does not use the delimeter 
>> specified!
>> Therefore, I can not use StringSegmentCount to determine how many 
>> segments
>> are in the list.  I wrote my own MyStringSegnentCount before I noticed
>> that the GetListOfFormFields is at fault instead and does not use the
>> delimiter as the documentation suggests.  Does anyone know how the
>>
>> DlgSelectItemInList  function determines how to split up the segments? 
>> Is
>> there a error in my logic or use in the test example below?  Can anyone
>> suggest a robust method to obtain the number of edit / password fields
>> visible on a web page?
>>
>>
>> Here is a test function demonstrating the improper use of delimiters
>> returned in the GetListOfFormFields:
>> Script SegmentTest ()
>>
>> Var
>>
>> String sTestString,
>>
>> String sDelimiter,
>>
>> Int iSegments
>>
>> Let sDelimiter = "|"
>>
>> Let sTestString = "UserID/ email: Edit|password Edit| line 3 \tEdit"
>>
>> Let sTestString = GetListOfFormFields (sDelimiter , WT_EDIT)
>>
>> ; InputBox ("Enter new string: ", "Here is the full string!", 
>> sTestString)
>>
>> Let iSegments = StringSegmentCount (sTestString, sDelimiter)
>>
>> SayInteger (iSegments)
>>
>> EndScript
>>
>>
>> Don Marang
>>
>>
>> __________
>> Visit and contribute to The JAWS Script Repository http://jawsscripts.com
>>
>> View the list's information and change your settings at
>> //www.freelists.org/list/jawsscripts
>>
>
> __________
> Visit and contribute to The JAWS Script Repository http://jawsscripts.com
>
> View the list's information and change your settings at
> //www.freelists.org/list/jawsscripts
> 

__________ 
Visit and contribute to The JAWS Script Repository http://jawsscripts.com

View the list's information and change your settings at 
//www.freelists.org/list/jawsscripts

Other related posts: