2012-12-17 47 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項目