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].
For more options, visit this group at
http://groups.google.com/group/tellurium-users?hl=en.