2012-12-17 41 views
-1

我正在尝试通过录制和回放来探索IDE与此站点http://www.barnesandnoble.com/如何处理来自xpath的动态ID

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 ='适量']/DIV [@ ID =' yui_3_3_0_1_1355746621091_90 ']/DIV [@ 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' ]

但是,当我们玩ti再次给出错误,找不到[error] locator: Wehn我搜索它的xpath,它的chnaged如下

/html/body [@ id ='CDS']/div [@ id ='navContainer']/div [@ id ='bnnav2011']/div [@ id ='yui_3_3_0_1_1355748592221_91']/div [@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的正在发生变化。

任何人可以告诉我如何处理这个?

+0

与[tag:firefox]和[tag:selenium-ide]有关系吗? –

+0

您应该给您的问题添加标签,让有知识的人可以看看您的问题! – theAlse

+0

是Alex,与seleniu有关m ide。我会在下次考虑正确的标签时小心谨慎。 –

回答

0

您可以尝试使用xpath:位置。看起来ID一直在变化。

+0

我是Selenium的新手。请详细说明如何使用它的位置? –

+0

当您在Selenium中查看您的操作时,请选择它,并在命令字段右侧有一个向下箭头。选择xpath:位置。 – Eric

+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')] 
+0

嗨Arran thnks很多您的意见,并为迟到回复感到抱歉。今天当用IDE记录时,它没有用ID记录它,而是用css记录如下css = li.ui-selectmenu-hover并且再次无法重放。给错误'[错误]元素css = li.ui-selectmenu-hover not found'。我安装了Xpather。 IS在这种情况下Firebug有帮助吗? –

+0

另外Arran我使用xpather来查找元素。我得到了Id的xpath(像/ html/body [@ id ='CDS']/div [@ id ='navContainer']/div [@ id =' )/ div [@ id ='yui_3_3_0_1_1355746621091_92']/...)从你找到xpath的地方'/ div [@ id ='yui_3_3_0_1_1355746621091_93']/div [@ id ='bn-global-header']// ul [@ class ='ui-selectmenu']/li [text()='All Products'and not(@ class ='ui-selectmenu-hidden')] '? –

0

作为一个回答你的问题,你应该从ID的移开,并尝试使用XPath或CSS选择器,您可以选择父母的第n个孩子。 既然你是新来的硒,我想指出我的笔记在这里.- http://selenium-testing-notes.blogspot.in/ 它会帮助你通过我陷入了很多其他陷阱。 我发现,以帮助选择器的最佳方式是与安装了firepath的firebug。这个设置可以帮助你验证你的xpath和css选择器。

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() 
0

艾伦你好,我能够用你给的XPath来点击所有产品按钮(的XPath = // UL [@类=“UI-selectmenu ']/li [text()='All Products'and not(@ class ='ui-selectmenu-hidden')] 也可以获得列表,但不能从菜单中点击Books项目