Mikhail,

I would like you to add another locator jlocator first. You can copy
whatever you need from
clocator to your jlocator. Later on, we will look at your jlocator to
see if we can merge
it back to clocator. The very important thing for the clocator or
jlocator is that it is able to handle
nested UI objects. That is to say, if you have

 A{
   B{
     C{
       D
       E
     }
    }
  }

Your jlocator should be able to add more constraints on the search
criteria when you walk along the path
A -> B -> C -> D

If this is possible, you can use the existing code to handle the rest.

Sometimes, Tellurium may also need to get back a list of elements, not
just one, which will improve the
performance a lot for dynamic objects such as a data grid. At the
current stage, Tellurium has to call
Selenium core multiple times to get back the list, which is not really
efficient.

Thanks,

Jian


On Nov 26, 1:28 pm, Mikhail Koryak <[EMAIL PROTECTED]> wrote:
> Jian,
> i am starting to look into this jquery stuff.
> Here is my question:
> In order to this "right" i need to modify clocator or add another
> location called jlocator which will contain the jquery locator and
> then bind the returned object to this uiObject.
>
> I also have a new idea on how to handle jquery selectors. As you may
> know, a jquery selector can return 0 to N jquery objects, but we dont
> really need these objects in selenium, we need to be able to _act_ on
> the collection, so the best thing to do is to keep the collection in a
> map in javascript, and return the key to tellurium. tellurium will
> then keep its own map of the UiObject to the key which was returned
> from selenium.
>
> i am going to try to add another locator by implementing
> AbstractLocateStrategy and see where that takes me
>
> On Nov 26, 12:03 pm, [EMAIL PROTECTED] wrote:
>
> > Mikhail reminded me of the selenium Contributed User-Extensions at
>
> >http://wiki.seleniumhq.org/display/SEL/Contributed+User-Extensions
>
> > Thanks.
>
> > On Oct 21, 9:18 pm, [EMAIL PROTECTED] wrote:
>
> > > As for how to add a new method to Tellurium, I give an example here on
> > > how to do that. (We could make Tellurium configurable to new methods,
> > > but user rarely needs to define custom methods, we defer this
> > > implementation until there are requests of this feature from users)
>
> > > Take the typeRepeated method as an example, (Assume you have modified
> > > Selenium core script and added the typeRepeated method)
>
> > > First, open up the org.tellurium.connector.CustomSelenium class and
> > > add the following method in,
>
> > >        public void typeRepeated(String locator, String text) {
>
> > >          commandProcessor.doCommand("typeRepeated", new String[]
> > > {locator, text});
>
> > >        }
>
> > > Then, In the org.tellurium.dsl.BaseDslContext class add the following
> > > method to define a new DSL
>
> > >     def typeRepeated(String uid, String input){
> > >         WorkflowContext context = WorkflowContext.getDefaultContext()
> > >         ui.walkTo(context, uid)?.typeRepeated(input){ loc, String[]
> > > events ->
> > >             String locator = locatorMapping(context, loc)
> > >             eventHandler.typeRepeated(locator, events)
> > >         }
> > >     }
>
> > > where the walkTo method parses the uid such as
> > > "google_start_page.inputbox" to find the given UI object "inputbox".
> > > The closure
>
> > > {loc, String[] events ->
> > >             String locator = locatorMapping(context, loc)
> > >             eventHandler.typeRepeated(locator, events)
>
> > > }
>
> > > just generates the runtime locator and then call the eventhandler for
> > > the method "typeRepeated".
> > > If the custom method is to access data, you should pass the method to
> > > the accessor instead of
> > > the eventhandler. For details, consult the following example
>
> > >     boolean isVisible(String uid){
> > >          WorkflowContext context = WorkflowContext.getDefaultContext()
> > >          def obj = ui.walkTo(context, uid)
> > >          if(obj != null){
> > >              return obj.isVisible(){ loc ->
> > >                 String locator = locatorMapping(context, loc)
> > >                 accessor.isVisible(locator)
> > >              }
> > >          }
>
> > >          return false
> > >     }
>
> > > Third, you need to add a method to the
> > > org.tellurium.event.EventHandler class in the case of "typeRepeated"
> > > as follows,
>
> > >     def typeRepeated(String locator, String input, String[] events) {
> > >         String[] defaultEvents = null
> > >         if(extraEvent)
> > >            defaultEvents = ["focus", "mouseOver", "mouseOut", "blur"]
>
> > >         processEvents(locator, events, defaultEvents){
> > >            dispatcher.typeRepeated(locator, input)
> > >         }
> > >     }
>
> > > For org.tellurium.access.Accessor, it is simpler and just passes the
> > > method to the dispatcher as follows,
>
> > >     def boolean isVisible(String locator){
>
> > >         return dispatcher.isVisible(locator)
> > >     }
>
> > > Then you need to add the new method to your UI object, for example,
>
> > > class InputBox extends UiObject{
> > >     ...
> > >     def typeRepeated(String input, Closure c){
> > >         c(locator, respondToEvents)
> > >     }
> > >     ...
>
> > > }
>
> > > After that, you are done. In your test file, you can use the
> > > typeRepeated now
>
> > > typeRepeated "google_start_page.inputbox", "tellurium"
>
> > > It is a bit complicated at the first sight, but not really after you
> > > read the code since
> > > the code looks like boilerplate code. Also you should understand the
> > > call flow in
> > > Tellurium.
>
> > >            DslContext
> > >                     |
> > >            UI Object
> > >                     |
> > >            EventHandler / Accessor
> > >                     |
> > >            Dispatcher
> > >                    |
> > >            SeleniumClient
> > >                    |
> > >            SeleniumConnector
> > >                    |
> > >            CustomSelenium
> > >                    |
> > > ----------------------------------------
> > >                    |
> > >            Selenium RC
> > >                    |
> > >            Selenium Server
> > >                    |
> > >             Selenium Core
>
> > > Let me know if you have any further questions.
>
> > > Thanks,
>
> > > Jian
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"tellurium-users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/tellurium-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to