Hi Jade, If you are not using Tellurium Engine, you don't need to use cache. Since the getSelectedIndex is not implemented in Tellurium APIs, Tellurium Engine simply delegates the call to Selenium core. To prove this, set
useTelluriumApi(false); to see if the problem is still there. If it is still there, it must be the Selenium API problem. I suspect the "index" parameter in the method getSelectedIndex() should be "selectedIndex". Will try some tests later. Thanks, Jian On Fri, Sep 3, 2010 at 3:23 PM, Jade <[email protected]> wrote: > Hi Jian, > > getSelectedValue works fine as does getSelectOptions and > getSelectValues. > > These are my test options: > > useTelluriumEngine(false); > useTelluriumApi(true); > useCache false > useCssSelector(true); > useTrace(true); > > I set useCache to false since the html changes with ajax but it > doesn't seem to fix those problems. > > The following method works since I changed to using getSelectedValue > instead of getSelectedIndex but it would be nice to have both options. > > /** > * Test the option specified by the indx for the selection. > * > * @param uid > * @param module > * @param indx > * @param shouldFail -- true if the indx should not be able to be > selected > */ > public static void selectClickableOption(final String listUid, > final > String selectorId, > final DslContext module, final int indx, boolean shouldFail) { > > log.info "selectClickableOption ${selectorId}" > // With Ajax, the module has to be clicked on so the uid is > found. > module.click listUid > > int len = module.getSelectOptions(selectorId).size() > > log.info("selector size (" + selectorId + "): " + len); > > > if (indx > len) { > fail("${indx} > selector size, ${selectorId}, size: > ${len}") > } > > if (indx < 1) { > fail("indx: ${indx} must be at least 1 or greater, > ${selectorId}, > size: ${len}") > } > > boolean successful = false; > int maxTries = 5; > int tries = 0; > // Due to ajax timing issues, try more than once to perform > this > action. > while (!successful && tries < maxTries) { > try { > // workaround due to tellurium bug with indx > problem returning 48 > when index set to 1 > // see > http://groups.google.com/group/tellurium-users/browse_thread/thread/994b889df6140bc1/5529f3dd9607fbec#5529f3dd9607fbec > // With Ajax, the module has to be clicked > on so the uid is found. > module.click listUid > > module.pause(VireoTestConfig.getPauseTime()); > > String[] values = > module.getSelectValues(selectorId) > for (value in values) > log.info "value: ${value}" > > // With Ajax, the module has to be clicked > on so the uid is found. > module.click listUid > > module.pause(VireoTestConfig.getPauseTime()); > > String[] options = > module.getSelectOptions(selectorId) > for (option in options) > log.info "option: ${option}" > > // without this, times out and field is no > longer selectable > module.click listUid > > module.pause(VireoTestConfig.getPauseTime()); > String origValue = > module.getSelectedValue(selectorId) > > module.click listUid > > module.pause(VireoTestConfig.getPauseTime()); > int origIndx = > module.getSelectedIndex(selectorId); > log.info "origIndx: ${origIndx}" > // bug? > // module.selectByIndex(selectorId, indx); > > // int selected = > module.getSelectedIndex(selectorId); > module.click listUid > module.selectByValue selectorId, > values[indx] > module.click listUid > String selectedValue = > module.getSelectedValue(selectorId) > > // if (shouldFail) { > // > assertEquals("selectOption: selecting ${indx} for $ > {selectorId} should have failed", origIndx, selected); > // } else { > // > assertEquals("selectOption: selecting ${indx} for $ > {selectorId} should have succeeded", indx, selected); > // } > successful = true > if (shouldFail) { > assertEquals("selectOption: > selecting ${indx} for ${selectorId} > should have failed", origValue, selectedValue); > } else { > assertEquals("selectOption: > selecting ${indx} for ${selectorId} > should have succeeded", values[indx], selectedValue); > } > } catch (Exception e) { > log.error("ajax timing error: " + > e.getMessage()) > tries++ > } catch (Throwable t) { > log.error("ajax timing error: " + > t.getMessage()) > tries++ > } > } > } > > Jade > > On Sep 3, 1:24 pm, Jian Fang <[email protected]> wrote: > > The Selenium call stack is as follows: > > > > Selenium.prototype.getSelectedIndex = function(selectLocator) { > > /** Gets option index (option number, starting at 0) for selected > option > > in the specified select element. > > * > > * @param selectLocator an <a href="#locators">element locator</a> > > identifying a drop-down menu > > * @return string the selected option index in the specified select > > drop-down > > */ > > return this.findSelectedOptionProperty(selectLocator, "index"); > > > > } > > > > Selenium.prototype.findSelectedOptionProperty = function(locator, > property) > > { > > var selectedOptions = this.findSelectedOptionProperties(locator, > > property); > > if (selectedOptions.length > 1) { > > Assert.fail("More than one selected option!"); > > } > > return selectedOptions[0]; > > > > } > > > > Selenium.prototype.findSelectedOptionProperties = function(locator, > > property) { > > var element = this.browserbot.findElement(locator); > > if (!("options" in element)) { > > throw new SeleniumError("Specified element is not a Select (has > no > > options)"); > > } > > > > var selectedOptions = []; > > > > for (var i = 0; i < element.options.length; i++) { > > if (element.options[i].selected) > > { > > var propVal = element.options[i][property]; > > selectedOptions.push(propVal); > > } > > } > > if (selectedOptions.length == 0) Assert.fail("No option selected"); > > return selectedOptions; > > > > } > > > > The getSelectedValue implementation is similar: > > > > Selenium.prototype.getSelectedValue = function(selectLocator) { > > /** Gets option value (value attribute) for selected option in the > > specified select element. > > * > > * @param selectLocator an <a href="#locators">element locator</a> > > identifying a drop-down menu > > * @return string the selected option value in the specified select > > drop-down > > */ > > return this.findSelectedOptionProperty(selectLocator, "value"); > > > > } > > > > What is the value your get back for getSelectedValue()? > > > > If getSelectedValue() returns a correct value, then it is the > > getSelectedIndex() implementation problem. > > If both return wrong values, then, it is probably the runtime locator > > problem. Are you using CSS selector? > > > > Thanks, > > > > Jian > > > > On Fri, Sep 3, 2010 at 11:10 AM, Jade <[email protected]> wrote: > > > Hi Jian, > > > > > The HTMLSource is very long. Here's the part that matches this > > > selector in one module: Selector(uid: "degreeSelector", clocator: [id: > > > "aspect_vireo_admin_View_field_degree"]) > > > > > and the List in the other module: List(uid: "degree", clocator: [tag: > > > "ol", id: "aspect_vireo_admin_View_field_degree"], separator: "li") { > > > Container(uid: "{all}", clocator: [:]) > > > } > > > > > <div class="ds-form-content"> > > > <div class="editableWrap"><ol alt="fakefield_20" title="" > > > id="aspect_vireo_admin_View_field_degree" class="fakeField fakeSelect > > > ds-select-field degree editable"><li class="hidden" id="">none</li><li > > > class="selected" id="Test Degree4">Test Degree4</li><li class="hidden" > > > id="Test Degree3">Test Degree3</li><li class="hidden" id="Test > > > Degree2">Test Degree2</li><li class="hidden" id="Business">Business</ > > > li><li class="hidden" id="Computer Science">Computer Science</li><li > > > class="hidden" id="Test Degree1">Test Degree1</li></ol></div> > > > </div> > > > > > Jade > > > > > On Sep 3, 9:50 am, Jian Fang <[email protected]> wrote: > > > > Hi Jade, > > > > > > the getHTMLSource command only works for Tellurium new Engine. You > can > > > make > > > > that call with the new engine as follows: > > > > > > click "DegreeInformationForm.degree" > > > > > > useTelluriumEngine(true) > > > > log.info "htmlSource: " + > > > > getHTMLSource("DegreeInformationClickedForm.degreeSelector") > > > > useTelluriumEngine(false) > > > > > > TestingUtils.selectClickableOption("DegreeInformationForm.degree", > > > > "DegreeInformationClickedForm.degreeSelector", this, indxToTest, > > > > shouldFail) > > > > > > Hope this helps. > > > > > > Thanks, > > > > > > Jian > > > > > > On Fri, Sep 3, 2010 at 9:57 AM, Jade <[email protected]> wrote: > > > > > Hi Jian, > > > > > > > I'm getting an exception when requesting the HTML source: ERROR: > > > > > Cannot find UI module DegreeInformationClickedForm.degreeSelector > from > > > > > cache > > > > > > > Here are my lines of code (I first clicked on the list): > > > > > > > click "DegreeInformationForm.degree" > > > > > log.info "htmlSource: " + > > > > > getHTMLSource("DegreeInformationClickedForm.degreeSelector") > > > > > > > TestingUtils.selectClickableOption("DegreeInformationForm.degree", > > > > > "DegreeInformationClickedForm.degreeSelector", this, indxToTest, > > > > > shouldFail) > > > > > > > My module def: > > > > > > > public void defineModule() { > > > > > ui.Form(uid: "DegreeInformationForm", clocator: > [tag: > > > > > "form", > > > > > method: "post", action: "${postAction}", class: "ds-interactive-div > > > > > view-form", id: "aspect_vireo_admin_View_div_view-form"]) { > > > > > InputBox(uid: "committee_member_2", > clocator: > > > [tag: > > > > > "input", id: > > > > > "aspect_vireo_admin_View_field_committee-member-2", type: "text"], > > > > > respond: ["click"]) > > > > > InputBox(uid: "committee_member_1", > clocator: > > > [tag: > > > > > "input", id: > > > > > "aspect_vireo_admin_View_field_committee-member-1", type: "text"], > > > > > respond: ["click"]) > > > > > > > List(uid: "degree", clocator: [tag: "ol", > id: > > > > > "aspect_vireo_admin_View_field_degree"], separator: "li") { > > > > > Container(uid: "{all}", clocator: > [:]) > > > > > } > > > > > InputBox(uid: "school", clocator: [tag: > "input", > > > id: > > > > > "aspect_vireo_admin_View_field_school", type: "text"], respond: > > > > > ["click"]) > > > > > InputBox(uid: "committee_email", clocator: > [tag: > > > > > "input", id: > > > > > "aspect_vireo_admin_View_field_committee-email", type: "text"], > > > > > respond: ["click"]) > > > > > InputBox(uid: "department", clocator: [tag: > > > "input", > > > > > id: > > > > > "aspect_vireo_admin_View_field_department", type: "text"], respond: > > > > > ["click"]) > > > > > > > List(uid: "college", clocator: [tag: "ol", > id: > > > > > "aspect_vireo_admin_View_field_college"], separator: "li", respond: > > > > > ["click"]) { > > > > > Container(uid: "{all}", clocator: > [:]) > > > > > } > > > > > InputBox(uid: "committee_member_3", > clocator: > > > [tag: > > > > > "input", id: > > > > > "aspect_vireo_admin_View_field_committee-member-3", type: "text"], > > > > > respond: ["click"]) > > > > > InputBox(uid: "discipline", clocator: [tag: > > > "input", > > > > > id: > > > > > "aspect_vireo_admin_View_field_discipline", type: "text"], respond: > > > > > ["click"]) > > > > > InputBox(uid: "semester", clocator: [tag: > > > "input", > > > > > id: > > > > > "aspect_vireo_admin_View_field_semester", type: "text"], respond: > > > > > ["click"]) > > > > > > > List(uid: "degreeLevel", clocator: [tag: > "ol", > > > id: > > > > > "aspect_vireo_admin_View_field_degreeLevel"], separator: "li", > > > > > respond: ["click"]) { > > > > > Container(uid: "{all}", clocator: > [:]) > > > > > } > > > > > } > > > > > > > //Since ajax changes the html when a list is > clicked, > > > this > > > > > module is > > > > > required to represent clickable lists once they've been clicked. > > > > > // For more information, see: > > > > > > > > http://groups.google.com/group/tellurium-users/browse_thread/thread/9. > > > .. > > > > > // > > > > > ui.Form(uid: "DegreeInformationClickedForm", > clocator: > > > [tag: > > > > > "form", > > > > > method: "post", action: "${postAction}", class: "ds-interactive-div > > > > > view-form", id: "aspect_vireo_admin_View_div_view-form"]) { > > > > > > > Selector(uid: "degreeSelector", clocator: > [id: > > > > > "aspect_vireo_admin_View_field_degree"]) > > > > > Selector(uid: "collegeSelector", clocator: > [id: > > > > > "aspect_vireo_admin_View_field_college"]) > > > > > Selector(uid: "degreeLevelSelector", > clocator: > > > [id: > > > > > "aspect_vireo_admin_View_field_degreeLevel"]) > > > > > } > > > > > > > ERROR: Cannot find UI module > > > > > DegreeInformationClickedForm.degreeSelector from cache > > > > > > com.thoughtworks.selenium.HttpCommandProcessor.throwAssertionFailureExceptionOrError(HttpCommandProcessor.java: > > > > > 97) > > > > > > com.thoughtworks.selenium.HttpCommandProcessor.doCommand(HttpCommandProcessor.java: > > > > > 91) > > > > > > sun.reflect.GeneratedMethodAccessor80.invoke(Unknown > > > > > Source) > > > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: > > > > > 43) > > > > > java.lang.reflect.Method.invoke(Method.java:616) > > > > > > org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite > > > > > > $PojoCachedMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java: > > > > > 229) > > > > > > org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java: > > > > > 52) > > > > > > org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java: > > > > > 129) > > > > > > org.telluriumsource.component.connector.CustomSelenium.getBundleResponse(CustomSelenium.groovy: > > > > > 257) > > > > > > sun.reflect.GeneratedMethodAccessor79.invoke(Unknown > > > > > Source) > > > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: > > > > > 43) > > > > > java.lang.reflect.Method.invoke(Method.java:616) > > > > > > > > org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java: > > > > > 88) > > > > > groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) > > > > > > > groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058) > > > > > > > groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886) > > > > ... > > > > 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]<tellurium-users%[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.
