getting selenium exception when using click, but isElementPresent returns true

18 views
Skip to first unread message

super fan 911

unread,
May 10, 2010, 7:11:20 PM5/10/10
to tellurium-users
I have the following snippet of HTML code for a pop up window:

<div id="alertDeleteConfirm" class="popupModalWindow">
<div class="top">
<h1>Delete Confirmation</h1>
<a onclick="cancelDelete();return false;" href="#"
class="closeModal">Close</a>
</div>
<div class="main">
Are you sure you want to delete this?<br>
<br>
<br>
</div>
<div class="actions"><button onclick="confirmDelete();"
id="deleteButton" class="smallPrimary"><span style="text-align:
center;">Delete</span></button>
<button onclick="cancelDelete();return false;"
id="cancelButton" class="smallSecondary"><span>Cancel</span></button>
</div>
</div>

I have defined the following UI definition:

ui.Container(uid: "delete_confirmation_popup", clocator: [tag:
"div", id: "alertDeleteConfirm"]) {
TextBox(uid: "title", clocator: [tag: "h1"])
UrlLink(uid: "close", cloator: [text: "Close", class:
"closeModal"])
TextBox(uid: "message", clocator: [tag: "div", class: "main"])
Button(uid: "delete", clocator: [tag: "button", id: "saveButton",
class: "smallPrimary"], respond: ["click"])
Button(uid: "cancel", clocator: [tag: "button", id: "cancelButton",
class: "smallSecondary"], respond: ["click"])
}

When I do a isElementPresent for all the UI objects, they all return
true. But, when I do a click on 'close', 'delete' they gives me a
selenium error. The 'cancel' works. Below is the selenium stack
trace,

com.thoughtworks.selenium.SeleniumException: ERROR: Command execution
failure. Please search the forum at http://clearspace.openqa.org for
error details from the log window. The error message is:
element.dispatchEvent is not a function
at
com.thoughtworks.selenium.HttpCommandProcessor.throwAssertionFailureExceptionOrError(HttpCommandProcessor.java:
97)
at
com.thoughtworks.selenium.HttpCommandProcessor.doCommand(HttpCommandProcessor.java:
91)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite
$PojoCachedMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:
229)
at
org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:
52)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:
129)
at
org.telluriumsource.component.connector.CustomSelenium.getBundleResponse(CustomSelenium.groovy:
257)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1058)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
at
groovy.lang.DelegatingMetaClass.invokeMethod(DelegatingMetaClass.java:
149)
at groovy.lang.MetaObjectProtocol$invokeMethod.call(Unknown Source)
at
org.telluriumsource.component.dispatch.Dispatcher.methodMissing(Dispatcher.groovy:
56)
at groovy.lang.MetaClassImpl.invokeMissingMethod(MetaClassImpl.java:
813)
at
groovy.lang.MetaClassImpl.invokePropertyOrMissing(MetaClassImpl.java:
1107)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1060)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
at
org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:
39)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:
129)
at
org.telluriumsource.component.bundle.BundleProcessor.passBundledCommand(BundleProcessor.groovy:
322)
at org.telluriumsource.component.bundle.BundleProcessor
$passBundledCommand.callCurrent(Unknown Source)
at
org.telluriumsource.component.bundle.BundleProcessor.process(BundleProcessor.groovy:
414)
at org.telluriumsource.component.bundle.BundleProcessor
$process.callCurrent(Unknown Source)
at
org.telluriumsource.component.bundle.BundleProcessor.methodMissing(BundleProcessor.groovy:
427)
at groovy.lang.MetaClassImpl.invokeMissingMethod(MetaClassImpl.java:
813)
at
groovy.lang.MetaClassImpl.invokePropertyOrMissing(MetaClassImpl.java:
1107)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1060)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
at
org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:
39)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:
129)
at org.telluriumsource.component.event.EventHandler
$_click_closure6.doCall(EventHandler.groovy:145)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
at
org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:
273)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
at
org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:
66)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:
151)
at org.telluriumsource.component.event.EventHandler
$_click_closure6.doCall(EventHandler.groovy)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
at
org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:
273)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
at
org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:
39)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:
121)
at org.telluriumsource.component.event.EventHandler
$_processEvents_closure1.doCall(EventHandler.groovy:85)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
at
org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:
273)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
at groovy.lang.Closure.call(Closure.java:276)
at groovy.lang.Closure.call(Closure.java:289)
at
org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:
1176)
at
org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:
1152)
at org.codehaus.groovy.runtime.dgm$114.invoke(Unknown Source)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite
$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:
270)
at
org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:
52)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:
125)
at
org.telluriumsource.component.event.EventHandler.processEvents(EventHandler.groovy:
83)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite
$PogoCachedMethodSiteNoUnwrapNoCoerce.invoke(PogoMetaMethodSite.java:
266)
at
org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:
51)
at
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:
44)
at
org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:
56)
at
org.telluriumsource.component.event.EventHandler.click(EventHandler.groovy:
144)
at org.telluriumsource.component.event.EventHandler
$click.call(Unknown Source)
at
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:
40)
at org.telluriumsource.component.event.EventHandler
$click.call(Unknown Source)
at org.telluriumsource.dsl.BaseDslContext
$_click_closure4.doCall(BaseDslContext.groovy:168)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233)
at
org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:
273)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:886)
at
org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:
39)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:
129)
at org.telluriumsource.ui.object.UrlLink.click(UrlLink.groovy:26)
at org.telluriumsource.ui.object.UrlLink$click.call(Unknown Source)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callSafe(AbstractCallSite.java:
90)
at org.telluriumsource.dsl.BaseDslContext.click(BaseDslContext.groovy:
166)
at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite
$PogoCachedMethodSiteNoUnwrap.invoke(PogoMetaMethodSite.java:246)
at
org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.callCurrent(PogoMetaMethodSite.java:
51)
at
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:
44)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:
143)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:
151)
... Removed 65 stack frames


I need some pointers on how to fix this issue. Thanks in advance!




--
You received this message because you are subscribed to the Google Groups "tellurium-users" group.
To post to this group, send email to telluri...@googlegroups.com.
To unsubscribe from this group, send email to tellurium-use...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/tellurium-users?hl=en.

Jian Fang

unread,
May 10, 2010, 9:15:04 PM5/10/10
to telluri...@googlegroups.com
If you use Tellurium 0.7.0, please turn on the Engine log using

useEngineLog(true)

so that Selenium core will return JavaScript error stack. Also, you can use the
firebug or firebug lite bundled in Selenium server 1.0.1-te3 to see the log from console
and look at which line caused the problem.

Thanks,

Jian

Jonathan Share

unread,
May 11, 2010, 4:07:45 AM5/11/10
to telluri...@googlegroups.com
I've seen this behaviour several times before and haven't yet set
aside time to create a reduced test case, but the problem for me has
been that that the selector used matches more than one html element.
Note that when you use id in a clocator with CSSSelectors then
tellurium throws away the definition of the containing elements and
starts the selector from the element id.

Therefore if you have another element on the page with the id
saveButton you are probably matching that as well. After noticing this
behaviour I have begun to avoid using id wherever possible in
preference for name on form elements.

Hope this helps,

Jonathan

Jian Fang

unread,
May 11, 2010, 9:26:31 AM5/11/10
to telluri...@googlegroups.com
Thanks Jonathan.

The id in the DOM should be unique and id selector is the fastest one. That is why jQuery
and Tellurium use id only and throw away other parts.

If you really need to use other attributes, you can try to use partial matching, i.e., if the ID is "aaa"
you can try "*aaa". Then tellurium will not optimize the generated selector.

Thanks,

Jian

Jonathan Share

unread,
May 11, 2010, 9:38:38 AM5/11/10
to telluri...@googlegroups.com
Yes I agree the id in the DOM _should_ be unique, but the team that
wrote the app I am testing obviously hasn't had any kind of basic
education in how HTML should be used (and this is a purchased product
so no real chance of getting this fixed). But I will give the partial
matching trick a try next time I trip over this kind of problem.

Jian Fang

unread,
May 11, 2010, 11:53:55 AM5/11/10
to telluri...@googlegroups.com
Seems in real world, there are always exceptions.

BTW, Jonathan, since you used Tellurium a lot. Do you have any feature proposal
or other suggestions to make 0.8.0 easier to use than 0.7.0? We haven't decided
the 0.8.0 tasks yet. But Trump will be on the top of the list.

Thanks,

Jian

Jonathan Share

unread,
May 14, 2010, 3:34:50 AM5/14/10
to telluri...@googlegroups.com
No feature proposals off the top of my head right now, but you will be
sure to hear from me if I come up with anything.

Regards,

Jonathan
Reply all
Reply to author
Forward
0 new messages