Daniel Wagner wrote:
> Hi Olivier,
>
> I think I know where the confusion comes from, I should really have 
> addressed this when answering your previous question but for some 
> reason it slipped my mind - sorry.
>
> qooxdoo widgets can have two kinds of child widgets:
> * "public" children that are added by the application developer using 
> the widget's add() method. Calling getChildren() on the widget returns 
> these.
> * "internal" children AKA child controls that are created implicitly 
> by the widget itself. These are returned by _getChildren().
>
> The TabView's public children are the Pages, while its internal 
> children are the SlideBar that contains the Buttons and the Stack that 
> *actually* contains the Pages.
>
> The Inspector's "widgets" window only displays the public children by 
> default, click the page/wrench button followed by the window's reload 
> button to display both internal and external children.
>
> The qxh locator actually checks *both* kinds of widgets for each 
> locator step: It calls first getChildren and then _getChildren on the 
> widget found by the previous step, concats the two arrays, then checks 
> the resulting list for a match.
>
> This is why both
> qxh=qx.ui.tabview.TabView/child[0]
> and
> qxh=qx.ui.tabview.TabView/child[3]/child[0]
>
> return the same widget, namely the first tabview.Page: The second 
> locator takes a "detour" through the Stack container which really 
> contains the pages but is hidden from the developer using the public API.
>
> I guess the lesson to draw from all this is that when writing 
> locators, it's best to be as specific as possible for each step, 
> avoiding wildcards and only using child[i] steps if you're certain 
> what they'll find.
>
>
> Apart from all that, there's the problem of finding the children of 
> any tabview.Page other than the one that is active on application 
> startup: The DOM nodes for the widgets on a tabview page are created 
> lazily; they don't exist until the page is activated.
> Selenium always works on DOM nodes, so for a page that has never been 
> active, the locator will find a widget but then calling 
> getContentElement().getDomElement() on it returns null. In Selenium 
> IDE, this is easy to spot:
>
> # [debug] Qxh Locator: Terminating search, found match; last step 
> :child[1], element: qx.ui.tabview.Page[99]
> # [error] locator not found: qxh=qx.ui.tabview.TabView/child[1], error 
> = Error: Element qxh=qx.ui.tabview.TabView/child[1] not found
>
> It also makes sense to click the page button first simply because 
> that's what a user interacting with the page would do, and simulating 
> user interaction is the whole point of the exercise :)
>
>
> Regards,
> Daniel
>
> Olivier ZORO-BI schrieb:
>> Olivier ZORO-BI wrote:
>>> Hi,
>>> Last time, I couldn't access TabviewPages of a tabview with 
>>> Selenium. I asked questions about it and I finally found
>>>  tabviewlocator/child[2]/child[i] although Qooxdoo inspector shows 
>>> me that tabviewPage is the direct child of tabview in my application.
>>>
>>> I didn't understand this formula but it worked until today with a 
>>> tabview used with a tree.  Does someone know something about this 
>>> problem?
>>> I would like to access the tabviewPages with a property (widgetId) 
>>> like all my other widgets :  
>>> tabviewlocator/*/[...@widgetid=tabviewpage] or with the label but it 
>>> doesn't work.
>>>
>>> Thanks for your help.
>>>
>>> Olivier
>>>
>>>
>>> ------------------------------------------------------------------------------
>>>  
>>>
>>> _______________________________________________
>>> qooxdoo-devel mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
>>>
>>>   
>> Hi again, I used Selenium IDE debug to have more information about it.
>> In facts, in tabviewlocator/child[2]/child[i], child[2] is a 
>> qx.container.SlideBar which might automatically be added with tabview 
>> because I did not find it in my code.
>> And child[i] is a qx.ui.tabview.TabButton which is not either in my 
>> code.
>>
>> I can only access my tabviewPages if I have already click on it and I 
>> was doing that with child[2]/child[i]. Otherwise, the tabviewPage is 
>> not found by Selenium.
>> Isn't it any other way to click the tabviewPages ( without 
>> qx.ui.tabview.TabButton which doesn't appear in the code) or is it 
>> possible  to  give  this  widget  a property like the others (wigdetId).
>>
>> Thanks.
>>
>> Olivier.
>>
>> ------------------------------------------------------------------------------
>>  
>>
>> _______________________________________________
>> qooxdoo-devel mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel
>>
>>
>
>
Hi Daniel,
Thanks for your answer. I didn't know about internal children.

Is there a way to get round this slowness of tabviewPage elements 
loading, given Selenium is very fast. Clicking on tabview.TabButton 
before is not always enough.

Olivier.


------------------------------------------------------------------------------

_______________________________________________
qooxdoo-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/qooxdoo-devel

Reply via email to