1

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

我尝试使用 Xpath-position,它适用于某些对象,但在Dropdown list 和 Buttons的情况下,它不起作用!

谁能告诉我如何找到对象的 Xpath(Java 中的 MeathodsS* elence *)或如何为下拉列表和按钮创建新的定位器查找器

我可以显示取笑我的下拉菜单的属性(由 Firebug检测)。

下拉的属性

<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>

Dropdown*选择* 的属性:

<ul>
    <li class="x-boundlist-item" role="option">Rescue</li>
</ul>
4

2 回答 2

2

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

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

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

  • 永远不要使用动态生成的 ID。喜欢(:id, 'ext-gen1345')
  • 永远不要使用绝对/无意义的 XPath,比如//*[@class='someclass']/li/ul/li[2]/ul/li[2]/table/tbody/tr/td[2]/div

  • 利用有意义的自动生成的部分 id 和类名。(因此,您需要在示例中显示更多 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 Selector 或多语言应用程序。

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

我就这个话题做出的其他回答:

于 2013-10-29T20:53:07.270 回答
1

我建议你从你的 DIV 的任何父级构建一个 xpath。如果没有直接的父节点有这样一个,你可能会搞砸。

例子,

//*[@id='parentof div']/div
//*[@class='grand parent of div']/div/div

我什至做了这样的事情,

//*[@class='someclass']/li/ul/li[2]/ul/li[2]/table/tbody/tr/td[2]/div

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

于 2013-10-29T15:22:11.057 回答