2011-11-03 64 views
2

我想在tabpanel中設置標籤的id。我寫的代碼是:如何在GWT的Tabpanel中添加標籤的ID?

Panel dateTab = new VerticalPanel(); 
queryTabPanel.addTab("Date", dateTab); 

其中queryTabPanel是另一個TabPanel。

我的問題:是爲選項卡設置Ids。這樣我可以點擊tabpanel中的'Date'標籤。 我曾嘗試:通過操作DOM喜歡:

DOM.setElementAttribute(productTab.getElement(), "id", "Swagatika"); 

但似乎並不奏效。 :(

有沒有人,如果這是可能的,如果是何其困難是添加標識任何想法。提前

感謝。

+1

我知道這不是你要找的,但是:你爲什麼要在標籤上設置一個ID?你的用例是什麼?必須有另一種方式來達到同樣的最終結果。 –

+0

爲什麼我要設置Id:我必須將Id分配給選項卡,以便我可以輕鬆識別具有ID的元素(儘管我能夠用CSSSelector進行識別,有時會變得非常複雜)。 我的用途案例:我使用Selenium WebDriver自動化應用程序,因爲GWT分配動態ID,Selenium無法獲取ID並單擊,所以如果我可以爲該選項卡分配ID,則可以輕鬆地在Selenium上單擊該ID。 – Swagatika

+0

那麼,[ensureDebugId](http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/user/client/ui/UIObject.html#ensureDebugId%28java.lang.String %29)應該是你正在尋找的工具。然後,第一個選項卡的ID將爲'gwt-debug-theIdYouChose-bar-tab1'(請參見[TabPanel#onEnsureDebugId](http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/) google/gwt/user/client/ui/TabPanel.html#onEnsureDebugId%28java.lang.String%29)) –

回答

2

對於使用webdriver的測試,你應該使用一個特殊的模塊該<inherits name="com.google.gwt.user.Debug"/>(見the GWT DevGuide「重命名模塊」),並在您的小工具叫ensureDebugId

在你的情況下,調用queryTabPanel.ensureDebugId("queryTabPanel")後,第一個選項卡將有gwt-debug-queryTabPanel-bar-tab1的ID(見TabPanel.html#onEnsureDebugId的詳細信息)。

+0

Thanks for the Reply,but I have read that the debug mode should be turned off in production.Is that true?如果那是真的,硒怎麼運行在生產模式? 也可以通過DOM操作,像我們如何添加到其他元素,如按鈕,文本框等(這實際上是我的問題),我們不能ID到標籤 – Swagatika

+1

您可以離開'';您的用戶只需支付分配ID的性能價格(可以忽略不計,也可以不)。我認爲Google在專用服務器上以「prod/web模式」(也可能在DevMode中)運行Selenium測試,其中應用程序已使用 '。 –

+0

你也可以告訴我,即使添加這個爲什麼我沒有獲得ID。我將添加到.gwt.xml以繼承該模塊。和queryTabPanel.ensureDebugId(「queryTabPanel」)。有什麼需要做的來反映這個嗎? – Swagatika

0

除了你需要使用TabLayoutPanel.getTabWidget(...)並在其上使用ensureDebugId類似下面的調試標誌:

SimpleLayoutPanel newTabPanel = new SimpleLayoutPanel(); 
    tabLayoutPanel.add(newTabPanel, "Date Tab"); 
    tabLayoutPanel.getTabWidget(newTabPanel).ensureDebugId("MyDateTab"); 

注意,將小部件添加到tabLayoutPanel之前設置調試ID將不會有任何效果。另外請確保使用getTabWidget(..)而不是getWidget(...)