Hi Jian,

The earlier json parse error was caused by the fact that tellurium
isn't correctly adding the double quotes around the groovy variables
in the action:

ui.Form(uid: "DspaceLoginForm", clocator: [tag: "form", method:
"post", action: "${VireoTestConfig.getWebApp()}/password-login",
class: "ds-interactive-div primary", id:
"aspect_eperson_PasswordLogin_div_login"]){

[{"obj":{"uid":"DspaceLoginForm","locator":{"tag":"form","attributes":
{"id":"aspect_eperson_PasswordLogin_div_login","action":xmlui/password-
login,"class":"ds-interactive-div
primary","method":"post"}},"uiType":"Form","metaData":
{"id":"DspaceLoginForm","type":"UiObject"}},"key":"DspaceLoginForm"},
{"obj":{"uid":"LoginPassword","locator":{"tag":"input","attributes":
{"id":"aspect_eperson_PasswordLogin_field_login_password","name":"login_password","class":"ds-
password-field","type":"password"}},"uiType":"InputBox","metaData":
{"id":"LoginPassword","type":"UiObject"}},"key":"DspaceLoginForm.LoginPassword"},
{"obj":{"uid":"LoginEmail","locator":{"tag":"input","attributes":
{"id":"aspect_eperson_PasswordLogin_field_login_email","name":"login_email","class":"ds-
text-field","type":"text"}},"uiType":"InputBox","metaData":
{"id":"LoginEmail","type":"UiObject"}},"key":"DspaceLoginForm.LoginEmail"},
{"obj":{"uid":"Submit","locator":
{"direct":true,"tag":"input","attributes":
{"id":"aspect_eperson_PasswordLogin_field_submit","name":"submit","value":"Sign
in","class":"ds-button-
field","type":"submit"}},"uiType":"SubmitButton","metaData":
{"id":"Submit","type":"UiObject"}},"key":"DspaceLoginForm.Submit"},
{"obj":{"uid":"Error","locator":{"tag":"span","attributes":
{"class":"error"}},"uiType":"Span","metaData":
{"id":"Error","type":"UiObject"}},"key":"DspaceLoginForm.Error"}]
[[obj:[uid:DspaceLoginForm, locator:[tag:form, attributes:
[id:aspect_eperson_PasswordLogin_div_login, action:xmlui/password-
login, class:ds-interactive-div primary, method:post]], uiType:Form,
metaData:[id:DspaceLoginForm, type:UiObject]], key:DspaceLoginForm],
[obj:[uid:LoginPassword, locator:[tag:input, attributes:
[id:aspect_eperson_PasswordLogin_field_login_password,
name:login_password, class:ds-password-field, type:password]],
uiType:InputBox, metaData:[id:LoginPassword, type:UiObject]],
key:DspaceLoginForm.LoginPassword], [obj:[uid:LoginEmail, locator:
[tag:input, attributes:
[id:aspect_eperson_PasswordLogin_field_login_email, name:login_email,
class:ds-text-field, type:text]], uiType:InputBox, metaData:
[id:LoginEmail, type:UiObject]], key:DspaceLoginForm.LoginEmail], [obj:
[uid:Submit, locator:[direct:true, tag:input, attributes:
[id:aspect_eperson_PasswordLogin_field_submit, name:submit, value:Sign
in, class:ds-button-field, type:submit]], uiType:SubmitButton,
metaData:[id:Submit, type:UiObject]], key:DspaceLoginForm.Submit],
[obj:[uid:Error, locator:[tag:span, attributes:[class:error]],
uiType:Span, metaData:[id:Error, type:UiObject]],
key:DspaceLoginForm.Error]]
Error: cannot find the top object DspaceLogin

Should I add this to the defects list?

Jade

On Sep 3, 3:28 pm, Jian Fang <[email protected]> wrote:
> Sorry, I was wrong, "index" parameter is correct. Seems "selectedIndex" is
> only used in jQuery.
>
> http://marcgrabanski.com/articles/jquery-select-list-values
>
> Then, the problem is really wired.
>
> I just added the getSelectedIndex() to the Engine project. Only for proof
> purpose, if you run the following snapshot selenium server with Tellurium
> APIs and cache enabled,
>
> http://maven.kungfuters.org/content/repositories/snapshots/org/seleni...
>
> is the problem still there?
>
> Thanks,
>
> Jian
>
> On Fri, Sep 3, 2010 at 3:50 PM, Jian Fang <[email protected]> wrote:
> > 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/9...
> >>                                 // 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: [:])
>
> ...
>
> 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