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

Reply via email to