For the first one, you should call click "Link"
because the bar is not a link. For the second one, it may be related to the way JavaScript event propagation. Vivek, can you provide some input here. Thanks, Jian On Tue, Jan 18, 2011 at 10:00 AM, Szewczyk Dratewka <[email protected]>wrote: > First of all, thank you for the quick responses. > > I tried both tellurium IDE which generated: > >> ui.Container(uid: "Link", clocator: [tag: "a"]){ > > TextBox(uid: "Bar", clocator: [tag: "span", text: "Bar", direct: "true"]) > > } > > click "Link.Bar" > > > this doesn't work ... > > then trump 0.8.0 rc1 > > Container(uid: "Menu", clocator: [tag: "div", class: "menu"]){ > > Span(uid: "Foo", clocator: [tag: "span", text: "Foo"]) > > Span(uid: "Bar", clocator: [tag: "span", text: "Bar"]) > > } > > click "Menu.Foo" > > > this one works!!! :-) > > Originally i thought that using trump wouldn't be any different from using > the ide, but > obviously I was wrong. > > Thanks, > dratewka > > > > On Tue, Jan 18, 2011 at 3:40 PM, Jian Fang <[email protected]>wrote: > >> Tellurium recommends not to use XPath and it does UI module to runtime >> locator mapping >> automatically, which is CSS selector by default. Tellurium new Engine uses >> a group locating >> algorithm to locate the whole UI module in one attempt. >> >> For you case, you could define the UI module as follows if you really need >> the Foo and Bar texts. >> >> >> ui.Container(uid: "menu", clocator: [tag: "div", class: "menu"]){ >> Container(uid: "FooLink", clocator: [tag: "a"]{ >> TextBox(uid: "Foo", clocator: [tag: "span", text:"Foo"]) >> >> ....Same for the Bar >> } >> >> Have you tried Tellurium IDE or Trump to automatically generate >> the UI module for you? >> >> Thanks, >> >> Jian >> >> On Tue, Jan 18, 2011 at 7:49 AM, Szewczyk Dratewka <[email protected]>wrote: >> >>> Thanks, setting the values to false gets the test working. I didn't know >>> that using >>> tellurium engine and css selectors had implications on using xpath. This >>> makes me think >>> that maybe I don't have to use xpath at all. Till now I've been trying to >>> use it to solve a case >>> in which there is a bunch of links like so: >>> >>> <div class='menu'> >>> <a href="http://www.foo.com"><span>Foo</span></a> >>> <a href="http://www.bar.com <http://www.foo.com/> >>> "><span>Bar</span></a> >>> </div> >>> >>> and I want to get the foo link. Now if there was no <span> inside, I >>> could >>> just use >>> ui.UrlLink(uid: "TheLink", clocator : [tag :"a", text : "Foo"]) >>> >>> but the <span> makes it more difficult. Obviously I can use xpath to do >>> this, but >>> is there a better alternative? >>> >>> Thanks, >>> dratewka >>> >>> p.s. I know that java would be better, but this is just a sandbox >>> project. >>> >>> On Tue, Jan 18, 2011 at 1:23 PM, Jian Fang <[email protected]>wrote: >>> >>>> The real problem is caused by the following two lines: >>>> useTelluriumEngine(true); >>>> useCssSelector(true) >>>> >>>> First, Tellurium engine does not use xpath. Second, you cannot use CSS >>>> selector because >>>> you use xpath. Please simply replace the above two lines with the >>>> following line >>>> >>>> useCssSelector(false) >>>> >>>> BTW, seems you use a groovy class to extend the JUnit Java class. You >>>> better use a Java class. >>>> >>>> Thanks, >>>> >>>> Jian >>>> >>>> On Tue, Jan 18, 2011 at 5:51 AM, dratewka <[email protected]> wrote: >>>> >>>>> Hello everybody, >>>>> >>>>> recently I've been trying to get tellurium to work with the project >>>>> I'm working on, however >>>>> it has been a bumpy road so far. >>>>> I've set up the environment using >>>>> >>>>> mvn archetype:create -DgroupId=your_group_id - >>>>> DartifactId=your_artifact_id \ >>>>> -DarchetypeArtifactId=tellurium-junit-archetype \ >>>>> -DarchetypeGroupId=org.telluriumsource -DarchetypeVersion=0.7.0 \ >>>>> -DarchetypeRepository= >>>>> http://maven.kungfuters.org/content/repositories/ >>>>> releases >>>>> >>>>> >>>>> and made a simple web page to play around with xpath locators. >>>>> The problem is, that they don't seem to work. At all. >>>>> >>>>> Here is a simple example - the web page : >>>>> >>>>> <html> >>>>> <head></head> >>>>> <body> >>>>> <a href="http://www.foo.com">Foo</a> >>>>> </body> >>>>> </html> >>>>> >>>>> >>>>> Ui module : >>>>> >>>>> public class FooModule extends DslContext{ >>>>> >>>>> public void defineUi() { >>>>> ui.UrlLink(uid: "TheLink", locator : "//a"); >>>>> } >>>>> } >>>>> >>>>> Test : >>>>> public class FooTestCase extends TelluriumJUnitTestCase{ >>>>> >>>>> private static FooModule foo; >>>>> >>>>> @BeforeClass >>>>> public static void initUi() { >>>>> foo = new FooModule(); >>>>> foo.defineUi(); >>>>> connectSeleniumServer(); >>>>> useTelluriumEngine(true); >>>>> useCssSelector(true) >>>>> >>>>> useTrace(true); >>>>> } >>>>> >>>>> @Before >>>>> public void connectToLocal() { >>>>> connectUrl("file:///C:/Temp/html/index.html") >>>>> } >>>>> >>>>> @Test >>>>> public void execFlow1(){ >>>>> foo.click "TheLink" >>>>> pause 10000 >>>>> } >>>>> >>>>> } >>>>> >>>>> Now, if I change the ui module to : >>>>> ui.UrlLink(uid: "TheLink", clocator : [tag :"a"]) >>>>> then everything works fine. However running it with the locator >>>>> described above I get: >>>>> >>>>> com.thoughtworks.selenium.SeleniumException: ERROR: Command execution >>>>> failure. Please search the Tellurium User Group at >>>>> http://groups.google.com/group/tellurium-users for error details from >>>>> the log window. The error message is: Syntax error, unrecognized >>>>> expression: >>>>> at >>>>> >>>>> com.thoughtworks.selenium.HttpCommandProcessor.throwAssertionFailureExceptionOrError(HttpCommandProcessor.java: >>>>> 97) >>>>> at >>>>> >>>>> com.thoughtworks.selenium.HttpCommandProcessor.doCommand(HttpCommandProcessor.java: >>>>> 91) >>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>>> at >>>>> >>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: >>>>> 39) >>>>> at >>>>> >>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: >>>>> 25) >>>>> 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 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>>> at >>>>> >>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: >>>>> 39) >>>>> at >>>>> >>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: >>>>> 25) >>>>> at >>>>> org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java: >>>>> 88) >>>>> 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 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>>> at >>>>> >>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: >>>>> 39) >>>>> at >>>>> >>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: >>>>> 25) >>>>> at >>>>> org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java: >>>>> 88) >>>>> 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.CallSiteArray.defaultCall(CallSiteArray.java: >>>>> 40) >>>>> at >>>>> >>>>> org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java: >>>>> 117) >>>>> at >>>>> >>>>> org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java: >>>>> 129) >>>>> at >>>>> >>>>> org.telluriumsource.component.bundle.BundleProcessor.flush(BundleProcessor.groovy: >>>>> 372) >>>>> at org.telluriumsource.component.bundle.BundleProcessor >>>>> $flush.call(Unknown Source) >>>>> at >>>>> >>>>> org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java: >>>>> 40) >>>>> at >>>>> >>>>> org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java: >>>>> 117) >>>>> at >>>>> >>>>> org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java: >>>>> 121) >>>>> at >>>>> >>>>> org.telluriumsource.framework.TelluriumFramework.pause(TelluriumFramework.groovy: >>>>> 371) >>>>> at >>>>> >>>>> org.telluriumsource.test.java.BaseTelluriumJavaTestCase.pause(BaseTelluriumJavaTestCase.java: >>>>> 156) >>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>>> at >>>>> >>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: >>>>> 39) >>>>> at >>>>> >>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: >>>>> 25) >>>>> at >>>>> org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java: >>>>> 88) >>>>> at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) >>>>> at >>>>> groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java: >>>>> 1326) >>>>> at >>>>> >>>>> org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.callStatic(StaticMetaClassSite.java: >>>>> 47) >>>>> at >>>>> >>>>> org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java: >>>>> 48) >>>>> at >>>>> >>>>> org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java: >>>>> 167) >>>>> at >>>>> >>>>> org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java: >>>>> 175) >>>>> at test.FooTestCase.execFlow1(FooTestCase.groovy:32) >>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>>> at >>>>> >>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: >>>>> 39) >>>>> at >>>>> >>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: >>>>> 25) >>>>> at org.junit.runners.model.FrameworkMethod >>>>> $1.runReflectiveCall(FrameworkMethod.java:44) >>>>> at >>>>> >>>>> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java: >>>>> 15) >>>>> at >>>>> >>>>> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java: >>>>> 41) >>>>> at >>>>> >>>>> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java: >>>>> 20) >>>>> at >>>>> >>>>> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java: >>>>> 28) >>>>> at >>>>> >>>>> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java: >>>>> 76) >>>>> at >>>>> >>>>> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java: >>>>> 50) >>>>> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) >>>>> at >>>>> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) >>>>> at >>>>> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) >>>>> at >>>>> org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) >>>>> at >>>>> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) >>>>> at >>>>> >>>>> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java: >>>>> 28) >>>>> at >>>>> >>>>> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java: >>>>> 31) >>>>> at org.junit.runners.ParentRunner.run(ParentRunner.java:236) >>>>> at org.junit.runner.JUnitCore.run(JUnitCore.java:157) >>>>> at >>>>> com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java: >>>>> 65) >>>>> >>>>> >>>>> >>>>> >>>>> According to tellurium manual such a locator using xpath should be >>>>> valid, >>>>> so I don't know what's going on. >>>>> >>>>> I'm running the test using Firefox 3.6.10 on a Windows 7 box. >>>>> >>>>> >>>>> Regards, >>>>> dratewka >>>>> >>>>> -- >>>>> 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]<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]<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]<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]<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.
