当前位置: 首页 > 面试题库 >

如何使用动态ID查找ExtJS元素

华旭
2023-03-14
问题内容

我正在使用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


问题答案:

我已经多次回答类似的问题,您可能想看看。

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-meaningful.x-grid-view .x-grid-table')

  • 利用按钮的文本。

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

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

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



 类似资料:
  • 问题内容: 我的页面上有两个元素(两个“取消”元素)。 如何单击第二个元素?显然,我无法获得ID,因为它是在每次访问时随机生成的。我可以使用什么? 问题答案: 1.使用FindElements方法,该方法使用给定的机制查找当前上下文内的所有IWebElement。(在这种情况下,您始终需要知道要查找的元素的索引。) 2.如果这些取消按钮位于不同的部分,则可以通过非ExtJS id属性进行标识。 3

  • 我试图创建一个HTML编辑器(学习目的),我试图使程序尽可能动态。我希望通过它的id查找FXML变量,如TextField,并在按下按钮时检索TextField中的文本。 我设置了2个映射变量 我希望类似于通过ActionEvent获取按钮ID/值的方式。 编辑:以下是完整的FXML btw

  • 问题内容: 以下定位技术之间有什么区别? 而且,从 性能角度来看 ,哪种方法是通过id定位元素的最快方法? 问题答案: 您的问题很难回答,肯定会给出一个结论性的答案。实际上,我很想将此问题标记为“太宽泛”,其他答案和评论也支持该问题。 以您的为例。纵观Selenium来源, 大多数 驱动程序只是获取您提供的ID,然后将其传递给有线协议: 如您所知,每个浏览器供应商都在单独的二进制文件中实现自己的有

  • 我正在为以下代码编写selenium脚本。 这些是如下所示的复选框。复选框的数量将根据数据库值进行更改。 在我的代码中,我首先检查是否选中了“Frau”复选框。所以我试着按照这个片段。 但是当我试图执行这个脚本时<代码>WebElement div=父级。findElement(By.xpath(“前面的同级:::div”)给我第一个div标记,而不是前一个。我想要一个兄弟姐妹。

  • 问题内容: 提供了type的HTML元素,如何设置其属性的值,即范围变量和字符串的连接? 问题答案: 如官方文档中所述,指令在这里完全可以提供帮助 https://docs.angularjs.org/guide/interpolation#-ngattr-for-binding-to- arbitrary-attributes 例如,要设置元素的属性值以使其包含索引,则视图片段可能包含 这将被插

  • 我试图使用这段代码动态地查找web元素,但是当我试图在我的测试用例上调用它时,它似乎不能有一个输入值,因为这段代码是我的自定义关键字代码的一部分。有人能帮我想办法做这件事吗。非常感谢!