Yes, that should be fine On 3 February 2010 16:09, Jian Fang <[email protected]> wrote: > BTW, could I ask you for a favor? I like to use your html source in our user > guide document since > it is a very good example for the Repeat object. > > Thanks in advance, > > Jian > > On Wed, Feb 3, 2010 at 10:06 AM, Jian Fang <[email protected]> wrote: >> >> The Repeat object inherits the Container object and it does not include UI >> templates. You can use it just like a Container. The >> difference is that you should use index to refer to a Repeat object. >> >> Here is the UI module I created for the html you provided. >> >> ui.Form(uid: "SailingForm", clocator: [name: "selectedSailingsForm"] >> ){ >> Repeat(uid: "Section", clocator: [tag: "div", class: "segment >> clearfix"]){ >> Repeat(uid: "Option", clocator: [tag: "div", class: "option", >> direct: "true"]){ >> List(uid: "Fares", clocator: [tag: "ul", class: "fares", direct: >> "true"], separator: "li"){ >> Container(uid: "all"){ >> RadioButton(uid: "radio", clocator: [:], respond: >> ["click"]) >> TextBox(uid: "label", clocator: [tag: "label"]) >> } >> } >> Container(uid: "Details", clocator: [tag: "div", class: >> "details"]){ >> Container(uid: "ShipInfo", clocator: [tag: "dl"]){ >> TextBox(uid: "ShipLabel", clocator: [tag: "dt", position: >> "1"]) >> TextBox(uid: "Ship", clocator: [tag: "dd", position: "1"]) >> TextBox(uid: "DepartureLabel", clocator: [tag: "dt", >> position: "2"]) >> Container(uid: "Departure", clocator: [tag: "dd", position: >> "2"]){ >> TextBox(uid: "Time", clocator: [tag: "em"]) >> } >> TextBox(uid: "ArrivalLabel", clocator: [tag: "dt", position: >> "3"]) >> Container(uid: "Arrival", clocator: [tag: "dd", position: >> "3"]){ >> TextBox(uid: "Time", clocator: [tag: "em"]) >> } >> } >> } >> } >> } >> } >> >> and the test case is shown as follows, >> >> @Test >> public void testRepeat(){ >> connect("JForm"); >> // useCssSelector(true); //uncomment this line if you >> choose to use css selector >> int num = jlm.getRepeatNum("SailingForm.Section"); >> assertEquals(2, num); >> num = jlm.getRepeatNum("SailingForm.Section[1].Option"); >> assertEquals(2, num); >> int size = >> jlm.getListSize("SailingForm.Section[1].Option[1].Fares"); >> assertEquals(2, size); >> String ship = >> jlm.getText("SailingForm.Section[1].Option[1].Details.ShipInfo.Ship"); >> assertEquals("A", ship); >> String departureTime = >> jlm.getText("SailingForm.Section[1].Option[1].Details.ShipInfo.Departure.Time"); >> assertEquals("08:00", departureTime); >> String arrivalTime = >> jlm.getText("SailingForm.Section[1].Option[1].Details.ShipInfo.Arrival.Time"); >> assertEquals("11:45", arrivalTime); >> } >> >> As you notice, the Repeat object has one additional method >> >> int getRepeatNum(String uid) >> >> to get back the number of repeated objects. >> >> Thanks, >> >> Jian >> >> On Wed, Feb 3, 2010 at 10:00 AM, Jian Fang <[email protected]> >> wrote: >>> >>> Hi there, >>> >>> I just checked in the Repeat object to Core. >>> >>> You can update your project from our Maven repo or download them directly >>> from >>> >>> >>> http://maven.kungfuters.org/content/repositories/snapshots/org/seleniumhq/selenium/server/selenium-server/1.0.1-te2-SNAPSHOT/selenium-server-1.0.1-te2-20100203.144532-2.jar >>> >>> >>> http://maven.kungfuters.org/content/repositories/snapshots/org/telluriumsource/tellurium-core/0.7.0-SNAPSHOT/tellurium-core-0.7.0-20100203.145844-77.jar >>> >>> The Repeat object is more elegant way to solve your problem. >>> >>> I will post my test code soon. >>> >>> Thanks, >>> >>> Jian >>> >>> On Wed, Feb 3, 2010 at 9:01 AM, Jian Fang <[email protected]> >>> wrote: >>>> >>>> Seems to be the new Tellurium API problem. Most Tellurium APIs have the >>>> same interface with Selenium APIs but with a different implementation, >>>> i.e, implemented >>>> using jQuery. I haven't tested all of them. I will look into this >>>> problem. >>>> >>>> For the timebeing, you can simply call useTelluriumApi(false), the core >>>> will switch back >>>> to Selenium APIs. The switch happens under the hood and you don't need >>>> to change your >>>> test code unless you call some APIs that only exist in Tellurium. >>>> >>>> Thanks, >>>> >>>> Jian >>>> >>>> On Wed, Feb 3, 2010 at 4:54 AM, Jonathan Share <[email protected]> >>>> wrote: >>>>> >>>>> 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"> >>>>> >> >> <label>Economy</label> >>>>> >> >> </li> >>>>> >> >> <li> >>>>> >> >> <input type="radio"> >>>>> >> >> <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"> >>>>> >> >> <label>Economy</label> >>>>> >> >> </li> >>>>> >> >> <li> >>>>> >> >> <input type="radio"> >>>>> >> >> <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"> >>>>> >> >> <label>Economy</label> >>>>> >> >> </li> >>>>> >> >> <li> >>>>> >> >> <input type="radio"> >>>>> >> >> <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"> >>>>> >> >> <label>Economy</label> >>>>> >> >> </li> >>>>> >> >> <li> >>>>> >> >> <input type="radio"> >>>>> >> >> <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)"> <label >>>>> >> >> >>>> >> for="..."><strong><span >>>>> >> >> >>>> >> id="...">3,000</span>KR</strong>economy</label> >>>>> >> >> >>>> >> </li> >>>>> >> >> >>>> >> <li> >>>>> >> >> >>>> >> <input id="..." name="..." type="radio" >>>>> >> >> >>>> >> value="..." >>>>> >> >> >>>> >> onclick="enableDisable(1,1)"> <label >>>>> >> >> >>>> >> for="..."><strong><span >>>>> >> >> >>>> >> id="...">4,000</span>KR</strong> 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. >>>>> >>>> >>> >> > > -- > 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.
