如何在 Selenium 中使用 EXTJS 生成的 ext-gen ID?
在测试自动化 Web 应用程序时,我获得了动态生成的 ext-gen ID。我尝试使用 xpath 但测试用例失败。我浏览了不同的网站,但没有找到任何运气。有人可以帮助我吗?
谢谢你, 斯里尼瓦斯·马蒂
While test automating a web application, I get dynamically generated ext-gen IDs. I tried using xpath but the test cases are failing. I went through different websites but did not find any luck. Can somebody help me?
Thank you,
Srinivas Marthi
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
对于自动化测试,最好完全避免使用 ExtJS 自动生成的 ID。您可以将自己的静态 ID 分配给组件,但现在您基本上是在代码中乱扔全局变量,这也不好。使用一些 ID 可能是一个有用的折衷方案,但您不想为每个小按钮分配一个 ID。
对于 ExtJS 4,我建议使用 ComponentQuery :
For automated testing, the auto-generated ID-s of ExtJS are best avoided altogether. You can assign your own static ID-s to components, but now you are basically littering your code with global variables, not good either. Using some ID-s might be a helpful compromise, but you don't want to assign an ID to every single little button.
For ExtJS 4 I suggest using the ComponentQuery:
我已经成功地自动化了 EXTJS 站点和自动生成的 id,尽管我不推荐这样做。 (因为 id 是自动生成的,如果将新元素添加到页面,则所有定位器都可能无效。)
我建议精确定位精确的项目,而不是完整路径
I've been successful with automating EXTJS sites and auto-generated ids, though I do not recommend it. (because the ids are autogenerated, if new elements are added to the page, all your locators are potentially invalid.)
I'd recommend pin-pointing the precise item, instead of a full path
使用 Selenium 的最好方法是在代码中设置唯一的 ID。
由于没有配置 ButtonId,因此您必须在创建按钮后附加按钮的 ID。
在 ExtJS 3 中,我们曾经设置按钮的 ID:
不幸的是,这在 ExtJS 4 中不再起作用,所以我也在寻找新的解决方案。 ;-)
The best thing using Selenium is to set unique IDs in the Code.
As there is no config buttonId you have to attach the ID for buttons after creation of the button.
In ExtJS 3 we used to set the ID for buttons:
Unfortunatly this does not work anymore in ExtJS 4, so I am looking for a new solution also. ;-)
由于id属性的值发生变化,即本质上是动态的,您将无法使用id属性的完整值,而只能使用静态的部分值。作为示例,对于以下 HTML:
要识别 <
table
>您需要为visibility_of_element_ located()
引入 WebDriverWait 节点,并且可以使用以下任一 定位器策略:使用
CSS_SELECTOR
:使用
XPATH
:注意:您必须添加以下导入:
但是,会有很多其他元素具有以 < 开头的 id 属性代码>ext-gen。因此,要唯一标识
元素,您需要按如下方式组合 class 属性:
使用
CSS_SELECTOR
:使用
XPATH
:参考
您可以在以下位置找到相关的详细讨论:
As the value of the id attribute changes i.e. dynamic in nature you won't be able to use the complete value of the id attribute and can use only partial value which is static. As an example, for the following HTML:
To identify the <
table
> node you need to induce WebDriverWait for thevisibility_of_element_located()
and you can use either of the following Locator Strategies:Using
CSS_SELECTOR
:Using
XPATH
:Note : You have to add the following imports :
However, there would be a lot other elements with id attribute starting with
ext-gen
. So to uniquely identify the<table>
element you need to club up the class attribute as follows:Using
CSS_SELECTOR
:Using
XPATH
:Reference
You can find a relevant detailed discussion in: