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 -~----------~----~----~----~------~----~------~--~---
