2011-11-03 73 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(...)