Wouldn't the original use case "to clear out the values of all of the text fields" be better served by implementing a reset method on the Form UI Object that calls the javascript Form.reset() method?
https://developer.mozilla.org/en/DOM/form.reset On 21 July 2010 18:45, Jian Fang <[email protected]> wrote: > From: Jian Fang <[email protected]> > Date: Wed, Jul 21, 2010 at 12:43 PM > Subject: Re: Which UI Module is the current one? > To: Jade <[email protected]> > > > You mean you want to find UIDs from the UI Module object by specifying some > constraints such as > ID list? Good idea, seems we should add couple findBy_ methods. I will think > about that. > > In the meanwhile, there is a method getUiByTag to get back UIDs from runtime > DOM, i.e., create some temporal UI object in the dom > so that you can reference them just like a regular UI object. > > UiByTagResponse getUiByTag(String tag, Map filters) > > after the work is done, you need to clear them up with the following method > > void removeMarkedUids(String tag) > > But your idea of providing search methods over the UI Module, not the > Runtime DOM is great. > > Thanks, > > Jian > > On Wed, Jul 21, 2010 at 12:20 PM, Jade <[email protected]> wrote: >> >> Hi Jian, >> >> I fixed the error that Jonathan pointed out and all the tests pass. >> Thank you both for spending the time to look through my code! >> >> In the process, I looked at the Container class that you mentioned and >> that helped me find another error. >> >> I'd like to clear out the values of all of the text fields in between >> the tests. >> >> However, this method is giving me a UiObjectNotFoundException because >> getAllFields is returning the id's of the elements. >> >> String[] inputFieldIds = getAllFields(); >> // This is causing an error: Cannot find UI Object >> for (String fieldId : inputFieldIds) { >> clearText(fieldId) >> pause pauseTime >> } >> >> error message: Cannot find UI Object >> aspect_vireo_submit_VerifyPersonalInformation_field_middleInitial in >> PersonalInformationForm. >> >> Since clearText expects the uid (not the id) of the element, I get an >> error. >> >> Is there a method for getting the uid from an id of an element? It >> would be awesome to have a version of the getAll____ methods that >> return the uids instead of the ids. >> >> Jade >> >> >> On Jul 21, 8:58 am, Jian Fang <[email protected]> wrote: >> > Most likely, the error message is thrown by the walkTo method in >> > Container >> > class of Tellurium core. >> > >> > public UiObject walkTo(WorkflowContext context, UiID uiid){ >> > >> > //if not child listed, return itself >> > if(uiid.size() < 1){ >> > if(this.locator != null){ // && this.useGroupInfo >> > groupLocating(context) >> > context.noMoreProcess = true; >> > } >> > >> > return this >> > } >> > >> > String child = uiid.pop() >> > >> > //otherwise, try to find its child >> > UiObject cobj = components.get(child) >> > >> > //if found the object >> > if(cobj != null){ >> > //update reference locator by append the relative locator >> > for >> > this container >> > if(this.locator != null){ >> > groupLocating(context) >> > >> > } >> > if(uiid.size() < 1){ >> > //not more child needs to be found >> > return cobj >> > }else{ >> > //recursively call walkTo until the object is found >> > return cobj.walkTo(context, uiid) >> > } >> > }else{ >> > >> > //cannot find the object >> > >> > println i18nBundle.getMessage("Container.CannotFindUIObject" >> > , >> > child , this.uid) <--this line >> > >> > return null >> > } >> > } >> > >> > Seems it tried to find UI Object >> > "PersonalInformationForm.LicenseAgreement" >> > but could not find, do you have another >> > container "PersonalInformationForm" over the "LicenseAgreement" object? >> > >> > Could you do me a favor to put a breakpoint to the line I indicated >> > above >> > and look at the content of the passed in variable "UiID uiid"? >> > >> > Jonathan, did you have a similar problem? >> > >> > Thanks, >> > >> > Jian >> > >> > On Tue, Jul 20, 2010 at 3:37 PM, Jade <[email protected]> wrote: >> > > Thanks for your quick reply Jonathan. The stacktrace is: >> > >> > > org.telluriumsource.exception.UiObjectNotFoundException: Cannot find >> > > UI Object LicenseAgreement.GoToPersonalInformation >> > > at >> > > sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native >> > > Method) >> > > at >> > >> > > >> > > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java: >> > > 39) >> > > at >> > >> > > >> > > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java: >> > > 27) >> > > at >> > > java.lang.reflect.Constructor.newInstance(Constructor.java:513) >> > > at >> > >> > > >> > > org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java: >> > > 77) >> > > at org.codehaus.groovy.runtime.callsite.ConstructorSite >> > > $ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java: >> > > 107) >> > > at >> > >> > > >> > > org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java: >> > > 52) >> > > at >> > >> > > >> > > org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java: >> > > 192) >> > > at >> > >> > > >> > > org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java: >> > > 200) >> > > at >> > >> > > >> > > org.telluriumsource.dsl.BaseDslContext.walkToWithException(BaseDslContext.groovy: >> > > 155) >> > > at org.telluriumsource.dsl.BaseDslContext >> > > $walkToWithException.callCurrent(Unknown Source) >> > > at >> > >> > > >> > > org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java: >> > > 44) >> > > at org.telluriumsource.dsl.BaseDslContext >> > > $walkToWithException.callCurrent(Unknown Source) >> > > at >> > >> > > >> > > org.telluriumsource.dsl.BaseDslContext.isElementPresent(BaseDslContext.groovy: >> > > 471) >> > > at >> > >> > > >> > > test.StudentSubmissionJUnitTestCase.returnToPersonalInformationPage(StudentSubmissionJUnitTestCase.java: >> > > 141) >> > > at >> > >> > > >> > > test.StudentSubmissionJUnitTestCase.testFillOutPersonalInformation(StudentSubmissionJUnitTestCase.java: >> > > 104) >> > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> > > at >> > > >> > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: >> > > 39) >> > > at >> > >> > > >> > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: >> > > 25) >> > > at java.lang.reflect.Method.invoke(Method.java:597) >> > > at org.junit.runners.model.FrameworkMethod >> > > $1.runReflectiveCall(FrameworkMethod.java:44) >> > > at >> > >> > > >> > > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java: >> > > 15) >> > > at >> > >> > > >> > > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java: >> > > 41) >> > > at >> > >> > > >> > > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java: >> > > 20) >> > > at >> > >> > > >> > > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java: >> > > 76) >> > > at >> > >> > > >> > > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java: >> > > 50) >> > > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) >> > > at >> > > org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) >> > > at >> > > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) >> > > at >> > > org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) >> > > at >> > > org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) >> > > at >> > > >> > > org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java: >> > > 28) >> > > at >> > > >> > > org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java: >> > > 31) >> > > at org.junit.runners.ParentRunner.run(ParentRunner.java:236) >> > > at >> > >> > > >> > > org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java: >> > > 46) >> > > at >> > > >> > > org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java: >> > > 38) >> > > at >> > >> > > >> > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java: >> > > 467) >> > > at >> > >> > > >> > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java: >> > > 683) >> > > at >> > >> > > >> > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java: >> > > 390) >> > > at >> > >> > > >> > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java: >> > > 197) >> > >> > > Here are snippets of the calling Junit Test and Module methods: >> > >> > > /** >> > > * Fill out page 1 of the student submission and press Submit. >> > > */ >> > > �...@test >> > > public void testFillOutPersonalInformation() { >> > > spim.doResetForm(); >> > > // Select the first non-empty option/value pair from each >> > > selection >> > > list >> > > // and verify that it's selected. >> > >> > > TestingUtils.selectFirstValidOption(collegeId, spim); >> > > TestingUtils.selectFirstValidOption(departmentId, spim); >> > > TestingUtils.selectFirstValidOption(degreeId, spim); >> > > TestingUtils.selectFirstValidOption(disciplineId, spim); >> > >> > > spim.doFillOutForm("M", "1987", "999-999-9999", >> > > "101 Permanent Address Austin, TX 78704", >> > > "[email protected] >> > > ", >> > > "888-888-8888", "101 Current Address Austin, TX >> > > 78704"); >> > >> > > spim.click("PersonalInformationForm.Submit"); >> > > spim.waitForPageToLoad(30000); >> > > assertTrue( >> > > "LicenseAgreement page hasn't loaded. Personal >> > > Information >> > > probably >> > > has an error.", >> > > slam.isElementPresent("LicenseAgreement.Submit")); >> > >> > > returnToPersonalInformationPage(); // this is where the error >> > > begins. Page one is correct so page 2 (license agreement) has loaded. >> > >> > > } >> > >> > > /** >> > > * We're on the license agreement page. Click on the input image >> > > to return >> > > * to the personal information page. >> > > */ >> > > private void returnToPersonalInformationPage() { >> > > System.out.println("returnToPersonalInformationPage title: " >> > > + spim.getTitle()); >> > > if >> > > (spim.isElementPresent("LicenseAgreement.GoToPersonalInformation")) { >> > > spim.click("LicenseAgreement.GoToPersonalInformation"); >> > > spim.waitForPageToLoad(30000); >> > > spim.waitForElementPresent(collegeId, 30000); >> > >> > > } >> > > System.out.println("returnToPersonalInformationPage title: " >> > > + spim.getTitle()); >> > > } >> > >> > > Here's some of the output from the console: >> > >> > > TE: Found exact match for UI Module 'LicenseAgreement': >> > > {"id":"LicenseAgreement","relaxDetails":[],"matches": >> > > 1,"relaxed":false,"score":100.0,"found":true} >> > > TE: Found exact match for UI Module 'LicenseAgreement': >> > > {"id":"LicenseAgreement","relaxDetails":[],"matches": >> > > 1,"relaxed":false,"score":100.0,"found":true} >> > > TE: Name: getTitle, start: 1279654077983, duration: 14ms >> > > TE: Name: getTitle, start: 1279654077983, duration: 14ms >> > > returnToPersonalInformationPage title: License Agreement >> > > Cannot find UI Object LicenseAgreement in PersonalInformationForm >> > >> > > Note that the StudentLicenseAgreementModule contains the InputBox: >> > > GoToPersonalInformation >> > >> > > public class StudentLicenseAgreementModule extends DslContext { >> > > public void defineUi() { >> > >> > > // Page two: license agreement >> > > ui.Form(uid: "LicenseAgreement", clocator: [tag: >> > > "form", >> > > method: >> > > "post", action: "/vireo101/vireo", class: "ds-interactive-div", id: >> > > "aspect_vireo_submit_LicenseAgreement_div_licenseAgreement"]){ >> > > CheckBox(uid: "Agree", clocator: [tag: "input", >> > > type: "checkbox", >> > > value: "agree", name: "agree"]) >> > >> > > InputBox(uid: "GoToPersonalInformation", >> > > clocator: >> > > [tag: "input", >> > > type: "image", value: "Verify Info", title: "Verify User Data: Viewed >> > > Step", name: "step_one", class: "ds-button-field vireo_step one", id: >> > > "aspect_vireo_submit_LicenseAgreement_field_step_one"], respond: >> > > ["mouseOut", "mouseOver", "click"]) >> > > SubmitButton(uid: "Submit", clocator: [tag: >> > > "input", >> > > type: >> > > "submit", value: "Agree and Continue>>", name: "saveAndContinue", >> > > class: "ds-button-field", id: >> > > "aspect_vireo_submit_LicenseAgreement_field_saveAndContinue"]) >> > > } >> > > } >> > >> > > I don't know if I need to include more containers around the html >> > > elements. I removed most of them. >> > >> > > BTW, I got it working by defining a new module that includes forms >> > > from multiple pages but I'd prefer not to do this if possible. Thus, >> > > if you have any information to share about your >> > >> > ... >> > >> > read more » > > > -- > 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. > -- 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.
