我正在测试的应用中的所有元素都有 dynanic ID 。当我重播而不刷新页面时,测试总是通过但是只要我刷新页面,测试失败因为所有元素的Id随机变化,而selenium 无法匹配所记录的ID与新ID。
我尝试使用Xpath-position,它适用于某些对象但是在下拉列表和按钮的情况下,它起作用了!
任何人都可以告诉我如何在对象中找到Xpath (Meathods在 JAVA 或S * 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>
答案 0 :(得分:2)
请在发帖前搜索,我一直在回答这个问题。
ExtJS页面很难测试,特别是在查找元素时。
以下是我认为有用的一些提示:
(:id, 'ext-gen1345')
不要使用绝对/无意义的XPath,例如//*[@class='someclass']/li/ul/li[2]/ul/li[2]/table/tbody/tr/td[2]/div
利用有意义的自动生成的部分ID和类名称。 (因此,您需要在示例中显示更多HTML,因为我可以提出建议。)
例如,this ExtJS网格示例:(:css, '.x-grid-view .x-grid-table')
会很方便。如果有多个网格,请尝试索引它们或找到可识别的祖先,例如(:css, '#something-meaningful .x-grid-view .x-grid-table')
。在您的情况下,(:css, '#something-meaningful .x-form-arrow-trigger')
利用按钮的文字。
例如,this ExtJS示例:您可以使用XPath .//li[contains(@class, 'x-boundlist-item') and text()='Rescue']
。但是,此方法不适用于CSS Selector或多语言应用程序。
测试的最佳方法是在源代码中创建有意义的类名。如果您无法访问源代码,请与您的经理联系,使用Selenium对抗ExtJS应用程序应该是开发人员的工作。 ExtJS为自定义类名提供cls
和tdCls
,因此您可以在源代码中添加cls:'testing-btn-foo'
,而Selenium可以通过(:css, '.x-panel .testing-btn-foo')
获取它。
我就这个主题做出的其他答案:
答案 1 :(得分: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
但是,不鼓励它这样做。