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.

Reply via email to