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