i see what you mean by adding constraints.
i see that as creating a jquery locator like this:
$("A").find("B").find("C");
where A, B, and C are jquery locators. This might be easier then all
thought.
On Nov 26, 1:46 pm, [EMAIL PROTECTED] wrote:
> 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
-~----------~----~----~----~------~----~------~--~---