如果没有给出唯一的定位器,如何在GWT applilcation中找到元素?

时间:2017-06-29 08:20:43

标签: selenium-webdriver gwt

<div class="LIJLHMB-ab-b-com-sencha-gxt-theme-neptune-client-base-field-Css3FieldLabelAppearance-Css3FieldLabelStyles-fieldElement" style="padding-left: 125px;">
<div id="x-auto-93" class="LIJLHMB-M-e-com-sencha-gxt-theme-neptune-client-base-field-Css3TextFieldAppearance-Css3TextFieldStyle-focus" __gwtcellbasedwidgetimpldispatchingfocus="true" __gwtcellbasedwidgetimpldispatchingblur="true" style="width: 275px; height: 32px;">
<div class="LIJLHMB-M-i-com-sencha-gxt-theme-neptune-client-base-field-Css3TextFieldAppearance-Css3TextFieldStyle-wrap" style="width: 275px;">
<input id="x-auto-93-input" class="LIJLHMB-M-h-com-sencha-gxt-theme-neptune-client-base-field-Css3TextFieldAppearance-Css3TextFieldStyle-text LIJLHMB-M-c-com-sencha-gxt-theme-neptune-client-base-field-Css3TextFieldAppearance-Css3TextFieldStyle-field" type="text" style="width: 275px;" value="" tabindex="0"/>
</div>
</div>
</div>
<div class="LIJLHMB-ab-a-com-sencha-gxt-theme-neptune-client-base-field-Css3FieldLabelAppearance-Css3FieldLabelStyles-clearLeft"/>
</div>
</div>

以上是我的代码。给出的id和类是auto id / class,并且每次安装新构建时都会更改。那么在这种情况下如何在进行自动化的同时从DOM中找到输入元素?在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

使用@external注释,您可以强制从混淆中排除一些CSS类/ ID,因此它们可供selenium测试使用:

@external legacySelectorA, legacySelectorB;
.obfuscated .legacySelectorA { .... }
.obfuscated .legacySelectorB { .... }
     

在上面的示例中,.obfuscated类选择器将是   模糊处理,并且obfuscated()方法将返回替换的名称。   两个遗留选择器都不会被混淆   legacySelectorA()方法将返回未经过混淆的值。   此外,因为legacySelectorB在。中明确定义   @external声明,不可访问的类名不会触发   错误。

答案 1 :(得分:0)

我假设您正在尝试基于GXT 4测试应用程序。

您的问题是,类名称将被混淆,并且ID是通用的。所以两者都不能用于测试。

要使您的应用程序可测试,请将以下行添加到模块描述符中:

<inherits name="com.google.gwt.user.Debug"/>

为您要测试的每个小部件调用ensureDebugId(Element el):

myWidget.ensureDebugId(myWidget.getElement(), "myDebugIdValue");