如何处理来自xpath的动态id

时间:2012-12-17 12:54:25

标签: selenium ide

我正在尝试使用此网站http://www.barnesandnoble.com/探索IDE,只需录制并播放。

1.在搜索框中输入要搜索的任何文字, 2.单击所有产品,选择书籍。

当我记录其xpath时如下

/ HTML /体[@ ID = 'CDS'] /格[@ ID = 'navContainer'] /格[@ ID = 'bnnav2011'] /格[@ ID = 'yui_3_3_0_1_1355746621091_93'] /格[@id = 'BN全局报头'] /格[@ ID = 'yui_3_3_0_1_1355746621091_92'] /格[@ ID = 'yui_3_3_0_1_1355746621091_91'] /形式[@ ID = '适量'] /格[@ ID = 'yui_3_3_0_1_1355746621091_90'] /格[@ ID = 'yui_3_3_0_1_1355746621091_89'] / UL [@ ID = 'yui_3_3_0_1_1355746621091_88'] /锂[@ ID = 'yui_3_3_0_1_1355746621091_99']

但是当我们再次播放时它会出错,找不到[错误]定位器: 我正在搜索它的xpath,它的chnaged,如下所示

/ HTML /体[@ ID = 'CDS'] /格[@ ID = 'navContainer'] /格[@ ID = 'bnnav2011'] /格[@ ID = 'yui_3_3_0_1_1355748592221_91'] /格[@id = 'BN全局报头'] /格[@ ID = 'yui_3_3_0_1_1355748592221_97'] /格[@ ID = 'yui_3_3_0_1_1355748592221_96'] /形式[@ ID = '适量'] /格[@ ID = 'yui_3_3_0_1_1355748592221_95'] /格[@ ID = 'yui_3_3_0_1_1355748592221_94'] / UL [@ ID = 'yui_3_3_0_1_1355748592221_93'] /锂[@ ID = 'yui_3_3_0_1_1355748592221_98']

注意到,它的ID正在发生变化。

任何人都能告诉我如何处理这个问题吗?

5 个答案:

答案 0 :(得分:1)

IDE在生成XPath查询时不是很聪明,事实上,没有一个自动化工具可以计算可靠的XPath查询。为什么?原因是为了生成XPath查询,它将从顶部(在html元素处)向下遍历树,向下到您正在与之交互的元素。

虽然这对很多事情都很好,但如果你的元素具有动态值(动态文本/ ID /名称/类,或者即使它改变位置),它也永远不会起作用。

您需要以不同的方式来获取它,因此您必须覆盖IDE为您提供的内容。

查看源代码,它们会为选择的任何类值ui-selectmenu-selected提供。因此,当页面加载时,“所有产品”列表项(li)将具有该类,当您更改项目时,新项目将具有该类。

所以你可以使用这个XPath:

//li[@class='ui-selectmenu-selected']

或者,这个CSS选择器:

li.ui-selectmenu-selected

或者,使用此XPath专门获取“所有产品”项。它将使用实际菜单启动一级,然后向下找到项目:

//ul[@class='ui-selectmenu']/li[text()='All Products' and not(@class='ui-selectmenu-hidden')]

答案 1 :(得分:0)

您可以尝试使用xpath:Position。似乎ID一直在变化。

答案 2 :(得分:0)

作为您问题的答案,您应该远离id并尝试使用xpath或css选择器,您可以在其中选择父级的第n个子级。 由于你是硒的新手,我想在这里指出我的笔记.- http://selenium-testing-notes.blogspot.in/ 它会帮助你解决我陷入的许多其他陷阱。 我发现帮助选择器的最好方法是使用安装了firepath的firebug。此设置可以帮助您验证xpath和css选择器。

答案 3 :(得分:0)

我看到你的问题基于这个答案首先你需要在Firefox中添加fire-path。使用firepath你可以找到xpath定位器。这对你很简单

示例:

driver.find_element_by_xpath("see![image which i have attached in this question][1] the xpath path locator details").click() 

答案 4 :(得分:0)

嗨Arran我可以使用你给出的xpath单击All Products按钮(xpath = // ul [@ class ='ui-selectmenu'] / li [text()='所有产品'而不是( @类= 'UI-selectmenu隐藏')]  并获得列表。但是无法单击菜单中的图书项目。