Jian, it's a lot simpler than that... Jade's code calls
spim.isElementPresent("LicenseAgreement.GoToPersonalInformation")
where spim is the StudentPersonalInformationModule, however it is the
StudentLicenseAgreementModule that has defined the LicenseAgreement
form. So the fix is for Jade to call
slam.isElementPresent("LicenseAgreement.GoToPersonalInformation").
There is no bug in the Tellurium code here, it's working exactly as it
should.

Regards,

Jonathan

On 21 July 2010 15:58, 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 set up, that would be
>> very helpful.
>>
>> Jade
>>
>> On Jul 20, 2:09 pm, Jonathan Share <[email protected]> wrote:
>> > I'm doing something similar and this works flawlessly.
>> > isElementPresent really shouldn't be throwing an exception. Can you
>> > email the stacktrace you are getting?
>> >
>> > Regards,
>> >
>> > Jonathan
>> >
>> > On 20 July 2010 18:48, Jade <[email protected]> wrote:
>> >
>> > > We have a 5 page submission form. I'd like to test page one with many
>> > > different values before moving on to testing page two. Thus, I have
>> > > one test that fills out the form with valid data. After the submit
>> > > button is pressed, the second page is loaded. The test then clicks on
>> > > a link in the second page to return to the first page and clear and
>> > > form and retest with different values.
>> >
>> > > I'd like to verify that a certain page has loaded. However, if the
>> > > page hasn't loaded, the moduleName.isElementPresent() throws an
>> > > exception. Is there a way to get the name of the current module that's
>> > > loaded?
>> >
>> > > BTW, our test class loads in both modules during setup:
>> >
>> > > �...@beforeclass
>> > >    public static void initUi() {
>> > >        spim = new StudentPersonalInformationModule();
>> > >        spim.defineUi();
>> >
>> > >        slam = new StudentLicenseAgreementModule();
>> > >        slam.defineUi();
>> >
>> > >        connectUrl("http://localhost:8000/vireo101/vireo/start";);
>> > >    }
>> >
>> > > Jade
>> >
>> > > --
>> > > 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
>> > > athttp://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.
>>
>
> --
> 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.

Reply via email to