On 2 February 2010 17:45, Jian Fang <[email protected]> wrote:
> I will look into the isElementPresent() problem. Are you using new Tellurium
> API?

No, I just tried to add a call to useTelluriumApi(true) and after that
change my test case was no longer able to click on links (test code
continued but no interaction happened with the web page)

>
> What do you mean "waitForPageToLoad doesn't seem to be working fine"?, it
> just returned
> without waiting? What was the behavior?

I mean that it appears to be returning before the page is finished
loading... if I call waitForElementPresent for something that should
be there immediately after page load (no dynamic javascript) then it
fails the first time it tests for the element (causing a screenshot to
be taken) but then on the second attempt to test for the element it
finds it and returns true.

>
> Thanks,
>
> Jian
>
> On Tue, Feb 2, 2010 at 11:24 AM, Jonathan Share <[email protected]> wrote:
>>
>> Thanks, I have a small test case working using lists, however now that
>> I've updated to the current snapshot again I'm seeing a couple of new
>> problems. isElementPresent() is throwing an exception when the element
>> doesn't exist (instead of returning false) and waitForPageToLoad
>> doesn't seem to be working fine... for example, the following code
>> that worked on an older snapshot
>>
>>    public void login(String username, String password) {
>>        type "login.username", username
>>        type "login.password", password
>>        click "login.submit"
>>        waitForPageToLoad 10000
>>        assertTrue("Failed to login", isElementPresent("welcomePage"))
>>    }
>>
>> Now needs to be updated to;
>>
>>    public void login(String username, String password) {
>>        type "login.username", username
>>        type "login.password", password
>>        click "login.submit"
>>        waitForPageToLoad 10000
>>        def result = waitForElementPresent("welcomePage", 5000)
>>        assertTrue("Failed to login", result)
>>    }
>>
>> I'm guessing this isn't the right solution, but it's home time for me
>> now, I'll look into it further tomorrow.
>>
>>
>> 2010/2/2 Jian Fang <[email protected]>:
>> > List is fine. The remaining task for 0.7.0 is to refactor List and Table
>> > so
>> > that you can reference them not by position only, but this should be
>> > after
>> > the RC1 release.
>> >
>> > I will create another test case for you tonight.
>> >
>> > Thanks,
>> >
>> > Jian
>> >
>> > On Tue, Feb 2, 2010 at 10:26 AM, Jonathan Share <[email protected]>
>> > wrote:
>> >>
>> >> Thanks for the response, your solution looks nice, however my example
>> >> html was perhaps a little oversimplified, the "option" div is repeated
>> >> several times within the "segment clearfix" div and the whole "segment
>> >> clearfix" div is also repeated several times, meaning there exists
>> >> more than one list with class fares in the form (see more detailed
>> >> outline below).
>> >>
>> >> Is there any better way to handle this situation? While creating the
>> >> below outline I have just come up with an idea of trying to make a
>> >> list out of the "segment clearfix" divs, instead of referencing them
>> >> with xpath, disadvantage of this is that my uids will be slightly less
>> >> expressive.
>> >>
>> >> Thanks for the help so far.
>> >>
>> >> Jonathan
>> >>
>> >> <form name="selectedSailingsForm">
>> >>    <h1>Choose ship</h1>
>> >>    <h3 class="inbound-outbound">Outbound</h3>
>> >>    <h2 class="content-header"><!-- Route description --></h2>
>> >>    <div class="segment clearfix">
>> >>        <div class="option">
>> >>            <ul class="fares">
>> >>                <li>
>> >>                    <input type="radio">&nbsp;
>> >>                    <label>Economy</label>
>> >>                </li>
>> >>                <li>
>> >>                    <input type="radio">&nbsp;
>> >>                    <label>Flexible</label>
>> >>                </li>
>> >>            </ul>
>> >>            <div class="details">
>> >>                <dl>
>> >>                    <dt>Ship:</dt>
>> >>                    <dd><!-- Ship Name --></dd>
>> >>                    <dt>Departs</dt>
>> >>                    <dd>
>> >>                        <em>08:00</em>
>> >>                    </dd>
>> >>                    <dt>Arrives</dt>
>> >>                    <dd>
>> >>                        <em>11:45</em>
>> >>                    </dd>
>> >>                </dl>
>> >>            </div>
>> >>        </div>
>> >>        <div class="option">
>> >>            <ul class="fares">
>> >>                <li>
>> >>                    <input type="radio">&nbsp;
>> >>                    <label>Economy</label>
>> >>                </li>
>> >>                <li>
>> >>                    <input type="radio">&nbsp;
>> >>                    <label>Flexible</label>
>> >>                </li>
>> >>            </ul>
>> >>            <div class="details">
>> >>                <dl>
>> >>                    <dt>Ship:</dt>
>> >>                    <dd><!-- Ship Name --></dd>
>> >>                    <dt>Departs</dt>
>> >>                    <dd>
>> >>                        <em>17:30</em>
>> >>                    </dd>
>> >>                    <dt>Arrives</dt>
>> >>                    <dd>
>> >>                        <em>21:15</em>
>> >>                    </dd>
>> >>                </dl>
>> >>            </div>
>> >>        </div>
>> >>    </div>
>> >>    <h3 class="inbound-outbound">Return</h3>
>> >>
>> >>    <h2 class="content-header"><!-- Route description --></h2>
>> >>
>> >>    <div class="segment clearfix">
>> >>        <div class="option">
>> >>            <ul class="fares">
>> >>                <li>
>> >>                    <input type="radio">&nbsp;
>> >>                    <label>Economy</label>
>> >>                </li>
>> >>                <li>
>> >>                    <input type="radio">&nbsp;
>> >>                    <label>Flexible</label>
>> >>                </li>
>> >>            </ul>
>> >>            <div class="details">
>> >>                <div class="photo"><img></div>
>> >>                <dl>
>> >>                    <dt>Ship:</dt>
>> >>                    <dd><!-- Ship Name --></dd>
>> >>                    <dt>Departs</dt>
>> >>                    <dd>
>> >>                        <em>02:00</em>
>> >>                    </dd>
>> >>                    <dt>Arrives</dt>
>> >>                    <dd>
>> >>                        <em>06:00</em>
>> >>                    </dd>
>> >>                </dl>
>> >>            </div>
>> >>        </div>
>> >>        <div class="option">
>> >>            <ul class="fares">
>> >>                <li>
>> >>                    <input type="radio">&nbsp;
>> >>                    <label>Economy</label>
>> >>                </li>
>> >>                <li>
>> >>                    <input type="radio">&nbsp;
>> >>                    <label>Flexible</label>
>> >>                </li>
>> >>            </ul>
>> >>            <div class="details">
>> >>                <dl>
>> >>                    <dt>Ship:</dt>
>> >>                    <dd><!-- Ship Name --></dd>
>> >>                    <dt>Departs</dt>
>> >>                    <dd>
>> >>                        <em>12:45</em>
>> >>                    </dd>
>> >>                    <dt>Arrives</dt>
>> >>                    <dd>
>> >>                        <em>16:30</em>
>> >>                    </dd>
>> >>                </dl>
>> >>            </div>
>> >>        </div>
>> >>    </div>
>> >>    <div class="segment clearfix">
>> >>        <!-- Other boring stuff -->
>> >>    </div>
>> >> </form>
>> >>
>> >> 2010/2/1 Jian Fang <[email protected]>:
>> >> > Here is my test code
>> >> >
>> >> > UI Module
>> >> >
>> >> >
>> >> >
>> >> > ----------------------------------------------------------------------------
>> >> > package org.telluriumsource.module
>> >> >
>> >> > import org.telluriumsource.dsl.DslContext
>> >> >
>> >> > class JListModule extends DslContext {
>> >> >
>> >> >   public void defineUi(){
>> >> >     ui.Form(uid: "selectedSailings", clocator: [name:
>> >> > "selectedSailingsForm"]) {
>> >> >       List(uid: "outgoingSailings", locator: "/div[1]") {
>> >> >         Container(uid: "all", clocator: [tag: "div", 'class':
>> >> > "option"])
>> >> > {
>> >> >           List(uid: "fares", clocator: [tag: "ul"]) {
>> >> >             Container(uid: "all", clocator: [tag: "li"]) {
>> >> >               RadioButton(uid: "radio", clocator: [:], respond:
>> >> > ["click"])
>> >> >               TextBox(uid: "label", clocator: [tag: "label"])
>> >> >             }
>> >> >           }
>> >> >           TextBox(uid: "departureTime", locator: "/div/dl/dd/em[1]")
>> >> >         }
>> >> >       }
>> >> >     }
>> >> >
>> >> >     ui.Form(uid: "Sailings", clocator: [name:
>> >> > "selectedSailingsForm"]){
>> >> >       List(uid: "Fares", clocator: [tag: "ul", class: "fares"],
>> >> > separator:
>> >> > "li"){
>> >> >         Container(uid: "all"){
>> >> >             RadioButton(uid: "radio", clocator: [:], respond:
>> >> > ["click"])
>> >> >             TextBox(uid: "label", clocator: [tag: "label"])
>> >> >         }
>> >> >       }
>> >> >     }
>> >> >   }
>> >> > }
>> >> >
>> >> >
>> >> > --------------------------------------------------------------------------------------------------
>> >> >
>> >> > Test Case
>> >> >
>> >> >
>> >> >
>> >> > -------------------------------------------------------------------------------------------------
>> >> > package org.telluriumsource.ft;
>> >> >
>> >> > import org.junit.AfterClass;
>> >> > import org.junit.Before;
>> >> > import org.junit.BeforeClass;
>> >> > import org.junit.Test;
>> >> > import org.telluriumsource.module.JListModule;
>> >> > import org.telluriumsource.test.java.TelluriumMockJUnitTestCase;
>> >> >
>> >> > public class JListTestJUnitCase extends TelluriumMockJUnitTestCase {
>> >> >    private static JListModule jlm;
>> >> >
>> >> >     @BeforeClass
>> >> >     public static void initUi() {
>> >> >         registerHtmlBody("JList");
>> >> >
>> >> >         jlm = new JListModule();
>> >> >         jlm.defineUi();
>> >> > //        useCssSelector(true);
>> >> > //        useTelluriumApi(true);
>> >> >         useTrace(true);
>> >> > //        useCache(true);
>> >> > //        useMacroCmd(true);
>> >> >         useEngineLog(true);
>> >> >     }
>> >> >
>> >> >     @Before
>> >> >     public void connectToLocal() {
>> >> >         connect("JList");
>> >> >     }
>> >> >
>> >> >     @Test   //This works fine if the following two commands are used:
>> >> > useCache(true); useTelluriumApi(true);
>> >> >     public void testGetListSize(){
>> >> >         int size =
>> >> > jlm.getListSize("selectedSailings.outgoingSailings[1].fares");
>> >> >         System.out.println("List Size " + size);
>> >> >     }
>> >> >
>> >> >     @Test
>> >> >     public void testGetNewListSize(){
>> >> >         int size = jlm.getListSize("Sailings.Fares");
>> >> >         System.out.println("List Size " + size);
>> >> >
>> >> >     }
>> >> >
>> >> >     @AfterClass
>> >> >     public static void tearDown(){
>> >> >         showTrace();
>> >> >     }
>> >> > }
>> >> >
>> >> >
>> >> >
>> >> > On Mon, Feb 1, 2010 at 11:05 AM, Jian Fang <[email protected]>
>> >> > wrote:
>> >> >>
>> >> >> Hi,
>> >> >>
>> >> >> Your UI module definition might be problematic. I used the following
>> >> >> one
>> >> >> and can get back the list size 2 correctly
>> >> >>
>> >> >>     ui.Form(uid: "Sailings", clocator: [name:
>> >> >> "selectedSailingsForm"]){
>> >> >>       List(uid: "Fares", clocator: [tag: "ul", class: "fares"],
>> >> >> separator:
>> >> >> "li"){
>> >> >>         Container(uid: "all"){
>> >> >>             RadioButton(uid: "radio", clocator: [:], respond:
>> >> >> ["click"])
>> >> >>             TextBox(uid: "label", clocator: [tag: "label"])
>> >> >>         }
>> >> >>       }
>> >> >>     }
>> >> >>
>> >> >> You should use the logical container to include the list elements.
>> >> >>
>> >> >> Also, please don't use hard coded xpath there, otherwise, your test
>> >> >> is
>> >> >> not
>> >> >> robust to changes. Also, most 0.7.0 new
>> >> >> features require the clocator.
>> >> >>
>> >> >> Interesting thing is I can get back the correct List size even with
>> >> >> your
>> >> >> UI module with new Tellurium API. I will
>> >> >> post all my test code soon.
>> >> >>
>> >> >> Thanks,
>> >> >>
>> >> >> Jian
>> >> >>
>> >> >> On Mon, Feb 1, 2010 at 10:49 AM, Jian Fang
>> >> >> <[email protected]>
>> >> >> wrote:
>> >> >>>
>> >> >>> You are right, the new core added a WorkflowContext variable to all
>> >> >>> Accessor methods
>> >> >>> so that we can pass in meta data to the tiers under it. That is why
>> >> >>> it
>> >> >>> cannot find the method with
>> >> >>> the old snapshot.
>> >> >>>
>> >> >>> Thanks,
>> >> >>>
>> >> >>> Jian
>> >> >>>
>> >> >>> On Mon, Feb 1, 2010 at 10:35 AM, Jonathan Share
>> >> >>> <[email protected]>
>> >> >>> wrote:
>> >> >>>>
>> >> >>>> Thanks, I'm also having problems with getXpathCount, but that may
>> >> >>>> be
>> >> >>>> because I'm using an old snapshot in order to work around the list
>> >> >>>> problem.
>> >> >>>>
>> >> >>>> "groovy.lang.MissingMethodException: No signature of method:
>> >> >>>> org.telluriumsource.access.Accessor.getXpathCount() is applicable
>> >> >>>> for
>> >> >>>> argument types: (java.lang.String) values:
>> >> >>>>
>> >> >>>>
>> >> >>>>
>> >> >>>> [//descendant-or-self::tab...@id="supplierEditor"]/tbody/tr[child::td]/td[1]]"
>> >> >>>>
>> >> >>>> 2010/2/1 Jian Fang <[email protected]>:
>> >> >>>> > Thanks for reporting the problem. I will create a test case and
>> >> >>>> > see
>> >> >>>> > what
>> >> >>>> > happens.
>> >> >>>> >
>> >> >>>> > Thanks,
>> >> >>>> >
>> >> >>>> > Jian
>> >> >>>> >
>> >> >>>> > On Mon, Feb 1, 2010 at 7:20 AM, Jonathan Share
>> >> >>>> > <[email protected]>
>> >> >>>> > wrote:
>> >> >>>> >>
>> >> >>>> >> Hi,
>> >> >>>> >>
>> >> >>>> >> I seem to be having a little problem with getListSize. When I
>> >> >>>> >> call
>> >> >>>> >> that method tellurium crashes on me with the following
>> >> >>>> >> exception;
>> >> >>>> >>
>> >> >>>> >> com.thoughtworks.selenium.SeleniumException: ERROR: Element
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >> //descendant-or-self::fo...@name="selectedSailingsForm"]/div[1]/d...@class="option"][1]/descendant-or-self::ul/li[3]
>> >> >>>> >> not found
>> >> >>>> >>
>> >> >>>> >> The interesting thing to note here is that there are only two
>> >> >>>> >> li
>> >> >>>> >> elements in the list. Is this a bug that has crept into
>> >> >>>> >> tellurium
>> >> >>>> >> or
>> >> >>>> >> am I doing something really stupid in my test?
>> >> >>>> >>
>> >> >>>> >> Thanks in advance
>> >> >>>> >>
>> >> >>>> >> Jonathan
>> >> >>>> >>
>> >> >>>> >> // MODEL
>> >> >>>> >> ui.Form(uid: "selectedSailings", clocator: [name:
>> >> >>>> >> "selectedSailingsForm"])
>> >> >>>> >> {
>> >> >>>> >>            List(uid: "outgoingSailings", locator: "/div[1]") {
>> >> >>>> >>                Container(uid: "all", clocator: [tag: "div",
>> >> >>>> >> 'class':
>> >> >>>> >> "option"]) {
>> >> >>>> >>                    List(uid: "fares", clocator: [tag: "ul"]) {
>> >> >>>> >>                        Container(uid: "all", clocator: [tag:
>> >> >>>> >> "li"]) {
>> >> >>>> >>                            RadioButton(uid: "radio", clocator:
>> >> >>>> >> [:],
>> >> >>>> >> respond: ["click"])
>> >> >>>> >>                            TextBox(uid: "label", clocator:
>> >> >>>> >> [tag:
>> >> >>>> >> "label"])
>> >> >>>> >>                        }
>> >> >>>> >>                    }
>> >> >>>> >>                    TextBox(uid: "departureTime", locator:
>> >> >>>> >> "/div/dl/dd/em[1]")
>> >> >>>> >>                }
>> >> >>>> >>            }
>> >> >>>> >> }
>> >> >>>> >>
>> >> >>>> >> // TEST LINE THAT FAILS
>> >> >>>> >> def numPricesForSailing =
>> >> >>>> >> getListSize("selectedSailings.outgoingSailings[1].fares")
>> >> >>>> >>
>> >> >>>> >> // HTML (edited a little)
>> >> >>>> >> <form action="..." id="airDetailsForm" method="POST"
>> >> >>>> >> name="selectedSailingsForm">
>> >> >>>> >>  <div class="segment clearfix">
>> >> >>>> >>    <div class="option">
>> >> >>>> >>      <ul class="fares">
>> >> >>>> >>        <li>
>> >> >>>> >>          <input id="..." name="..." type="radio" value="..."
>> >> >>>> >> checked
>> >> >>>> >> onclick="enableDisable(1,2)">&nbsp;<label
>> >> >>>> >> for="..."><strong><span
>> >> >>>> >> id="...">3,000</span>KR</strong>economy</label>
>> >> >>>> >>        </li>
>> >> >>>> >>        <li>
>> >> >>>> >>          <input id="..." name="..." type="radio" value="..."
>> >> >>>> >> onclick="enableDisable(1,1)">&nbsp;<label
>> >> >>>> >> for="..."><strong><span
>> >> >>>> >> id="...">4,000</span>KR</strong>&nbsp;Flexible</label>
>> >> >>>> >>        </li>
>> >> >>>> >>      </ul>
>> >> >>>> >>    </div>
>> >> >>>> >>  </div>
>> >> >>>> >> </form>
>> >> >>>> >>
>> >> >>>> >> --
>> >> >>>> >> 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.
>> >> >>>> >>
>> >> >>>> >
>> >> >>>> > --
>> >> >>>> > 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.
>> >> >>>> >
>> >> >>>>
>> >> >>>> --
>> >> >>>> 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.
>> >> >>>>
>> >> >>>
>> >> >>
>> >> >
>> >> > --
>> >> > 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.
>> >> >
>> >>
>> >> --
>> >> 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.
>> >>
>> >
>> > --
>> > 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.
>> >
>>
>> --
>> 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.
>>
>
> --
> 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.
>

-- 
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