Thanks very much Jonathan for spotting that error! Jade
On Jul 21, 2:54 am, Jonathan Share <[email protected]> wrote: > Your problem is that here; > > if(spim.isElementPresent("LicenseAgreement.GoToPersonalInformation")) { > spim.click("LicenseAgreement.GoToPersonalInformation"); > spim.waitForPageToLoad(30000); > spim.waitForElementPresent(collegeId, 30000); > > } > > You should be using slam, not spim as it is the slam module that has > defined the LicenseAgreement model. > > Other than that it looks like your setup is very similar to mine, > other than I push as much logic as possible into the *Module classes. > For example, I would have moved the returnToPersonalInformationPage > method into the StudentLicenseAgreementModule class making the test > itself easier to read and the code reusable in other tests in the > future. > > Regards, > > Jonathan > > On 20 July 2010 21:37, 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 > > ... > > 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.
