Could you change the following timeout value to a larger one in
TelluriumConfig.groovy?

        timeoutInSeconds = 30

Let us know if this works for you.

Thanks,

Jian

On Tue, Mar 23, 2010 at 8:03 AM, dominicm <[email protected]>wrote:

> Hi Jian,
>
> Thanks for taking a look. Do you know how I could increase the timeout
> of the isElementPresented call?
>
> On the page under test there are some frames, but when I run
> "findElementOrNull" from FBLite it returns within a couple of seconds.
> Is there a possibility that the bundle processor is timing out here?
> If so is it possible to increase this on a case basis?
>
> Thanks
>
> On Mar 22, 6:31 pm, Jian Fang <[email protected]> wrote:
> > But, if we trace the execution flow of Selenium isElementPresent() api as
> > follows,
> >
> > Selenium.prototype.isElementPresent = function(locator) {
> >     /**
> >     * Verifies that the specified element is somewhere on the page.
> >     * @param locator an <a href="#locators">element locator</a>
> >     * @return boolean true if the element is present, false otherwise
> >     */
> >     var element = this.browserbot.findElementOrNull(locator);
> >     if (element == null) {
> >         return false;
> >     }
> >     return true;
> >
> > };
> >
> > * Finds an element on the current page, using various lookup protocols
> > */
> > BrowserBot.prototype.findElementOrNull = function(locator, win) {
> >     locator = parse_locator(locator);
> >
> >     if (win == null) {
> >         win = this.getCurrentWindow();
> >     }
> >     var element = this.findElementRecursive(locator.type, locator.string,
> > win.document, win);
> >
> >     if (element != null) {
> >         return this.browserbot.highlight(element);
> >     }
> >
> >     // Element was not found by any locator function.
> >     return null;
> >
> > };
> >
> > BrowserBot.prototype.findElementRecursive = function(locatorType,
> > locatorString, inDocument, inWindow) {
> >
> >     var element = this.findElementBy(locatorType, locatorString,
> inDocument,
> > inWindow);
> >     if (element != null) {
> >         return element;
> >     }
> >
> >     for (var i = 0; i < inWindow.frames.length; i++) {
> >         // On some browsers, the document object is undefined for
> > third-party
> >         // frames.  Make sure the document is valid before continuing.
> >         if (inWindow.frames[i].document) {
> >             element = this.findElementRecursive(locatorType,
> locatorString,
> > inWindow.frames[i].document, inWindow.frames[i]);
> >
> >             if (element != null) {
> >                 return element;
> >             }
> >         }
> >     }
> >
> > };
> >
> > Seems your observation of infinite loop is actually a normal behavior for
> > Selenium to repeatedly locate the element from different frames
> > as shown in the findElementRecursive() function and it should return null
> > eventually. Your root cause seems to be caused by
> > timeout as shown in the log,
> >
> > "com.thoughtworks.selenium.
> > HttpCommandProcessor.throwAssertionFailureExceptionOrError:
> > com.thoughtworks.selenium.SeleniumException: ERROR: Command timed out:
> > ERROR: Command timed out * Mon Mar 22 17:20:49 GMT 2010"
> >
> > Perhaps you have many frames in your web page and IE8 is slow to search
> them
> > one by one? How about to increase the timeout threshold
> > for the isElementPresented() call?
> >
> > Thanks,
> >
> > Jian
> >
> >
> >
> > On Mon, Mar 22, 2010 at 2:22 PM, Jian Fang <[email protected]>
> wrote:
> > > That is kinda strange. Seems the locate function has returned to
> Selenium
> > > API isElementPresented() call.
> >
> > > This is proved from the log and the following code snippet.
> >
> > >  Tellurium.prototype.locateElementWithCacheAware = function(locator,
> > > inDocument, inWindow){
> > >     var element = null;
> >
> > >     var json = locator;
> > >     !tellurium.logManager.isUseLog || fbLog("JSON presentation of the
> cache
> > > aware locator: ", json);
> > >     var cal = JSON.parse(json, null);
> > >     !tellurium.logManager.isUseLog || fbLog("Parsed cache aware
> locator: ",
> > > cal);
> >
> > >     !tellurium.logManager.isUseLog || fbLog("Tellurium Cache option: ",
> > > this.isUseCache());
> > >     if (this.isUseCache()) {
> > >         //if Cache is used, try to get the UI element from the cache
> first
> > >         element = this.getUiElementFromCache(cal.rid);
> > >         !tellurium.logManager.isUseLog || fbLog("Got UI element " +
> cal.rid
> > > + " from Cache.", element);
> >
> > >         if (element != null) {
> > >             //need to validate the result from the cache
> > >             !tellurium.logManager.isUseLog || fbLog("Trying to validate
> the
> > > found UI element " + cal.rid, element);
> > >             if (!validateDomRef(element)) {
> > >                 fbError("The UI element " + cal.rid + " from cache is
> not
> > > valid", element);
> > >                 this.cache.relocateUiModule(cal.rid);
> > >                 //after relocating the UI module, retry to get the UI
> > > element from the cache
> > >                 element = this.getUiElementFromCache(cal.rid);
> > >                 !tellurium.logManager.isUseLog || fbLog("After
> relocating
> > > UI module, found ui element" + cal.rid, element);
> > >             }
> > >         }else{
> > >             if(cal.locator != null && cal.locator.trim().length > 0){
> > >                 //If cannot find the UI element from the cache, locate
> it
> > > as the last resort
> > >                 !tellurium.logManager.isUseLog || fbLog("Trying to
> locate
> > > the UI element " + cal.rid + " with its locator " + cal.locator + "
> because
> > > cannot find vaild one from cache", cal);
> > >                 element = this.locate(cal.locator);
> > >             }
> > >         }
> > >     }else{
> > >         !tellurium.logManager.isUseLog || fbLog("Trying to locate the
> UI
> > > element " + cal.rid + " with its locator " + cal.locator + " because
> cache
> > > option is off", cal);
> > >         element = this.locate(cal.locator);
> > >     }
> >
> > >     if(element == null){
> > >         fbError("Cannot locate element for uid " + cal.rid + " with
> locator
> > > " + cal.locator, element);
> > >     }
> >
> > >     !tellurium.logManager.isUseLog || fbLog("Returning found UI element
> ",
> > > element);
> > >     return element;
> > > };
> >
> > > On Mon, Mar 22, 2010 at 2:04 PM, dominicm <[email protected]
> >wrote:
> >
> > >> Apologies I hit return when i was still composing the message! To be
> > >> more specific, this problem only happens if the element doesn't exist
> > >> on the page.
> >
> > >> Not sure if this is a selenium bug or not, but what seems to be
> > >> happening is that isElementPresent is getting stuck in an infinite
> > >> loop, presumably because the returned value is null. Exact same tests
> > >> are fine in FF and googlechrome. I'm using IE8.
> >
> > >> Here are snippets from the engine log.
> >
> > >> "Issue Bundle Command "
> >
> > >>
> "[{"uid":"mainColumn.pods.largePodContainer[1].events[1].eventName","args":
> > >> ["jquery=#podsContainer div.Expander:not(.narrow):eq(0) div.podContent
> > >> > table > tbody > tr:eq(0)
> > >> td.eventName"],"name":"isElementPresent","sequ":8}]"
> > >> "Dispatching command: " Object sequ=8
> > >> uid="mainColumn.pods.largePodContainer[1 ..." name="isElementPresent"
> > >> args=[1]
> > >> "Update argument list for command isElementPresent" Object sequ=8
> > >> uid="mainColumn.pods.largePodContainer[1 ..." name="isElementPresent"
> > >> args=[1]
> > >> "Command after updating argument list: " Object sequ=8
> > >> uid="mainColumn.pods.largePodContainer[1 ..." name="isElementPresent"
> > >> args=[1]
> > >> "delegate command to Selenium" Object sequ=8
> > >> uid="mainColumn.pods.largePodContainer[1 ..." name="isElementPresent"
> > >> args=[1]
> > >> "Delegate Call isElementPresent to Selenium" Object sequ=8
> > >> uid="mainColumn.pods.largePodContainer[1 ..." name="isElementPresent"
> > >> args=[1]
> > >> "JSON presentation of the cache aware locator: "
> >
> > >>
> "{"rid":"mainColumn.pods.largePodContainer[1].events[1].eventName","locator­":"jquery=#podsContainer
> > >> div.Expander:not(.narrow):eq(0) div.podContent > table > tbody >
> > >> tr:eq(0) td.eventName"}"
> > >> "Parsed cache aware locator: " Object
> > >> rid="mainColumn.pods.largePodContainer[1 ..."
> > >> locator="jquery=#podsContainer div.Expander: ..."
> > >> "Tellurium Cache option: " false
> > >> "Trying to locate the UI element
> > >> mainColumn.pods.largePodContainer[1].events[1].eventName with its
> > >> locator jquery=#podsContainer div.Expander:not(.narrow):eq(0)
> > >> div.podContent > table > tbody > tr:eq(0) td.eventName because cache
> > >> option is off" Object rid="mainColumn.pods.largePodContainer[1 ..."
> > >> locator="jquery=#podsContainer div.Expander: ..."
> > >> >>> console.trace(stack)
> > >> function"[object Object]"argumentsundefined
> > >> function"[object Object]"argumentsundefined
> > >> function"[object Object]"argumentsundefined
> > >> "Cannot locate element for uid
> > >> mainColumn.pods.largePodContainer[1].events[1].eventName with locator
> > >> jquery=#podsContainer div.Expander:not(.narrow):eq(0) div.podContent >
> > >> table > tbody > tr:eq(0) td.eventName" null
> > >> "Returning found UI element " null
> > >> "JSON presentation of the cache aware locator: "
> >
> > >>
> "{"rid":"mainColumn.pods.largePodContainer[1].events[1].eventName","locator­":"jquery=#podsContainer
> > >> div.Expander:not(.narrow):eq(0) div.podContent > table > tbody >
> > >> tr:eq(0) td.eventName"}"
> > >> "Parsed cache aware locator: " Object
> > >> rid="mainColumn.pods.largePodContainer[1 ..."
> > >> locator="jquery=#podsContainer div.Expander: ..."
> > >> "Tellurium Cache option: " false
> >
> > >> <snip>
> >
> > >> "Trying to locate the UI element
> > >> mainColumn.pods.largePodContainer[1].events[1].eventName with its
> > >> locator jquery=#podsContainer div.Expander:not(.narrow):eq(0)
> > >> div.podContent > table > tbody > tr:eq(0) td.eventName because cache
> > >> option is off" Object rid="mainColumn.pods.largePodContainer[1 ..."
> > >> locator="jquery=#podsContainer div.Expander: ..."
> > >> >>> console.trace(stack)
> > >> function"[object Object]"argumentsundefined
> > >> function"[object Object]"argumentsundefined
> > >> function"[object Object]"argumentsundefined
> > >> "Cannot locate element for uid
> > >> mainColumn.pods.largePodContainer[1].events[1].eventName with locator
> > >> jquery=#podsContainer div.Expander:not(.narrow):eq(0) div.podContent >
> > >> table > tbody > tr:eq(0) td.eventName" null
> > >> "Returning found UI element " null
> > >> "Issue Bundle Command " "[{"uid":"","args":
> > >> [],"name":"isAlertPresent","sequ":9}]"
> > >> "Dispatching command: " Object sequ=9 uid="" name="isAlertPresent"
> > >> args=Object
> > >> "Command after updating argument list: " Object sequ=9 uid=""
> > >> name="isAlertPresent" args=Object
> > >> "delegate command to Selenium" Object sequ=9 uid=""
> > >> name="isAlertPresent" args=Object
> > >> "Delegate Call isAlertPresent to Selenium" Object sequ=9 uid=""
> > >> name="isAlertPresent" args=Object
> >
> > >> --
> > >> 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]>
> <tellurium-users%2bunsubscr...@­googlegroups.com>
> > >> .
> > >> For more options, visit this group at
> >
> > ...
> >
> > read more »- Hide quoted text -
> >
> > - Show quoted text -
>
> --
> 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.

Reply via email to