-1

我正在尝试通过此站点http://www.barnesandnoble.com/探索 IDE ,只需录制和播放即可。

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

当我记录它的xpath如下

/html/body[@id='CDS']/div[@id='navContainer']/div[@id='bnnav2011']/div[@id='yui_3_3_0_1_1355746621091_93']/div[@id='bn -global-header']/div[@id='yui_3_3_0_1_1355746621091_92']/div[@id='yui_3_3_0_1_1355746621091_91']/form[@id='qs']/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']/li[@id='yui_3_3_0_1_1355746621091_99']

但是当我们再次播放 ti 时,它会给出错误,[error] locator not found: Wehn i search for its xpath ,它的 chnaged 如下所示

/html/body[@id='CDS']/div[@id='navContainer']/div[@id='bnnav2011']/div[@id='yui_3_3_0_1_1355748592221_91']/div[@id='bn -global-header']/div[@id='yui_3_3_0_1_1355748592221_97']/div[@id='yui_3_3_0_1_1355748592221_96']/form[@id='qs']/div[@id='yui_3_3_0_1_135574859221_95']/div[@ id='yui_3_3_0_1_1355748592221_94']/ul[@id='yui_3_3_0_1_1355748592221_93']/li[@id='yui_3_3_0_1_1355748592221_98']

请注意,它的 ID 正在改变。

谁能告诉我如何处理这个?

4

5 回答 5

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')]
于 2012-12-17T14:52:33.410 回答
0

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

于 2012-12-17T20:09:44.110 回答
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() 
于 2012-12-18T05:10:36.630 回答
0

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

于 2012-12-17T13:00:59.023 回答
0

嗨,Arran,我可以使用您提供的 xpath ( xpath= //ul[@class='ui-selectmenu']/li[text()='All Products' 而不是(@class= 'ui-selectmenu-hidden')] 并获得可用列表。但随后无法从菜单中单击 Books 项。

于 2012-12-29T16:35:18.307 回答