我正在使用Selenium,需要获取控件的ID,但ID是动态的,我无法得到它。
<em id="button-1122-btnWrap">
<button id="button-1122-btnEl" class="x-btn-center" autocomplete="off" role="button" disabled="disabled" hidefocus="true" type="button" style="width: 21px; height: 21px;">
<span id="button-1122-btnInnerEl" class="x-btn-inner" style="width: 21px; height: 21px; line-height: 21px;"> </span>
<span id="button-1122-btnIconEl" class="x-btn-icon icon-save-invoice"></span>
</button>
数字1122是动态的,还有其他按钮具有相同的开头button-###+btnWrap
。
答案 0 :(得分:3)
我多次回答你的问题,你可能想看看。
ExtJS页面很难测试,特别是在查找元素时。
以下是我认为有用的一些提示:
(:id, 'button-1122-btnEl')
不要使用绝对/无意义的XPath,例如//div[4]/div[3]/div[4]/div/div/div/em/button
利用有意义的自动生成的部分ID和类名称。 (因此,您需要在示例中显示更多HTML,因为我可以提出建议。)
例如,this ExtJS网格示例:(:css, '.x-grid-view .x-grid-table')
会很方便。如果有多个网格,请尝试将其编入索引或找到可识别的祖先,例如(:css, '#something-meaningful .x-grid-view .x-grid-table')
。
利用按钮的文字。
例如,this ExtJS示例:您可以使用XPath .//span[contains(@class, 'x-btn-inner') and text()='Send']
。但是,此方法不适用于CSS Selector或多语言应用程序。
测试的最佳方法是在源代码中创建有意义的类名。如果您无法访问源代码,请与您的经理联系,使用Selenium对抗ExtJS应用程序应该是开发人员的工作。 ExtJS为自定义类名提供cls
和tdCls
,因此您可以在源代码中添加cls:'testing-btn-foo'
,而Selenium可以通过(:css, '.x-panel .testing-btn-foo')
获取它。
我就这个主题做出的其他答案:
注意: sircapsalot的答案对ExtJS不起作用,因为大多数按钮都有CSS Selector em[id^='button-'][id$='-btnWrap']
,但是不能怪他,因为这是特定的ExtJS,有些人们可能不熟悉。)
答案 1 :(得分:0)
CSS选择器很简单。
您的选择器将是,
em[id^='button-'][id$='-btnWrap']
或者如果你想点击那里的按钮 -
em[id^='button-'][id$='-btnWrap'] > button