首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到具有动态ID的XPath元素

问如何找到具有动态ID的XPath元素
EN

Stack Overflow用户
提问于 2013-10-28 10:12:12
回答 2查看 5.1K关注 0票数 1

我正在测试的应用程序中的所有元素都具有动态ID的。当我在不刷新页面的情况下重播时,测试总是会通过,但是一旦刷新页面,测试就会失败,因为所有元素的id都会随机变化,selenium 无法匹配E 213记录的id和新的id。

我尝试使用Xpath-Xpath,它对一些对象有效,但是如果使用下拉列表和按钮,则使用Xpath-!!

请告诉我如何找到对象的Xpath (、JAVA、或S*elence*中的方法),或者如何为下拉列表和按钮创建一个新的定位器查找器。

我可以显示下拉列表的属性(由Firebug检查),这是在取笑我。

下拉的属性:

代码语言:javascript
复制
<div id="ext-gen1345" class="x-trigger-index-0 x-form-trigger x-form-arrow-trigger x-form-trigger-last x-unselectable" role="button" style="-moz-user-select: none;"></div>

下拉列表的属性*选择*

代码语言:javascript
复制
<ul>
    <li class="x-boundlist-item" role="option">Rescue</li>
</ul>
EN

回答 2

Stack Overflow用户

发布于 2013-10-29 20:53:07

请在发帖前搜索,我一直在反复回答这个问题。

ExtJS页面很难测试,特别是在查找元素方面。

以下是一些我认为有用的建议:

  • 永远不要使用动态生成的ID。就像(:id, 'ext-gen1345')
  • 永远不要使用绝对/无意义的XPath,比如//*[@class='someclass']/li/ul/li[2]/ul/li[2]/table/tbody/tr/td[2]/div
  • 利用有意义的自动生成的部分ids和类名。(因此您需要在示例中显示更多的HTML,因为我可以提供建议。) 例如,这 ExtJS网格示例:(:css, '.x-grid-view .x-grid-table')将非常方便。如果存在多个网格,请尝试对它们进行索引或定位可识别的祖先,如(:css, '#something-meaningful .x-grid-view .x-grid-table')。在您的例子中,(:css, '#something-meaningful .x-form-arrow-trigger')
  • 利用按钮的文本. 例如,这 ExtJS示例:您可以使用XPath .//li[contains(@class, 'x-boundlist-item') and text()='Rescue']。但是,这种方法不适用于CSS选择器或多语言应用程序.
  • 最好的测试方法是在源代码中创建有意义的类名。如果您没有访问源代码的权限,请与您的管理人员交谈,对ExtJS应用程序使用Selenium应该是开发人员的工作。ExtJS为自定义类名提供了cls和tdCls,因此您可以在源代码中添加cls:'testing-btn-foo',Selenium可以通过(:css, '.x-panel .testing-btn-foo')获得它。

我就这个问题所作的其他回答:

票数 2
EN

Stack Overflow用户

发布于 2013-10-29 15:22:11

我建议您从DIV的任何父级构建xpath。如果没有直接父节点,则可能会造成混乱。

例如,

代码语言:javascript
复制
//*[@id='parentof div']/div
//*[@class='grand parent of div']/div/div

我甚至做过这样的事,

代码语言:javascript
复制
//*[@class='someclass']/li/ul/li[2]/ul/li[2]/table/tbody/tr/td[2]/div

但是,它仍然不鼓励这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19632031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档