C# 如何查找具有动态id的ExtJS元素

C# 如何查找具有动态id的ExtJS元素,c#,extjs,selenium,webdriver,selenium-webdriver,C#,Extjs,Selenium,Webdriver,Selenium Webdriver,我正在使用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;"&g

我正在使用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是动态的,还有其他按钮具有相同的开头
按钮-####+btnWrap

简单的CSS选择器

你的选择是

em[id^='button-'][id$='-btnWrap']
或者如果你想点击那里的按钮-

em[id^='button-'][id$='-btnWrap'] > button

我已经回答了很多次这样的问题,你可能想看看

ExtJS页面很难测试,尤其是在查找元素时

以下是我认为有用的一些技巧:

  • 永远不要使用动态生成的ID。像
    (:id,'button-1122-btnEl')
  • 永远不要使用绝对/无意义的XPath,比如
    //div[4]/div[3]/div[4]/div/div/div/em/button

  • 利用有意义的自动生成的部分ID和类名。(因此,您需要在示例中显示更多HTML,因为我可以提供建议。)

    例如,ExtJS网格示例:
    (:css,'.x-grid-view.x-grid-table')
    会很方便。如果有多个网格,请尝试为它们编制索引或定位可识别的祖先,如
    (:css,#something.x-grid-view.x-grid-table')

  • 利用按钮的文本

    例如,ExtJS示例:您可以使用XPath
    //span[contains(@class,'x-btn-inner')和text()='Send']
    。但是,这种方法不适用于CSS选择器或多语言应用程序

  • 最好的测试方法是在源代码中创建有意义的类名。如果您无法访问源代码,请与您的经理联系,对ExtJS应用程序使用Selenium应该是开发人员的工作。ExtJS为自定义类名提供了
    cls
    tdCls
    ,因此您可以在源代码中添加
    cls:'testing-btn-foo'
    ,Selenium可以通过
    (:css,.x-panel.testing-btn-foo')
    获得它

我对这个问题的其他回答是:


注意:sircapsalot的答案不适用于ExtJS,因为大多数按钮都有CSS选择器
em[id^='button-'][id$='-btnWrap']
(但不能怪他,因为这是ExtJS特有的,有些人可能不熟悉)。

嗨。em id是静态的还是动态的?如果不是动态的,你可以使用这个。