2015-10-29 45 views
1

我有一張桌子,有四列,行數也在增加。每次測試時,我都需要在最後一行應用測試,我不知道它的XPath,因爲當我第一次編寫測試時它不在那裏。查找按鈕的所有XPath並選擇最後一個?

,我需要會像中的XPath:

//*[@id="example"]/div/table/tbody/tr[X]/td[4]/a[1] 

可變X

有沒有辦法來取消X價值,並選擇最大值沒有,或類似的?

+0

歡迎來到Stack Overflow。當詢問代碼時,我們需要查看輸入數據的最小示例以及演示問題所需的最小代碼。沒有這些,我們必須花時間來湊齊兩者。這可能會導致錯誤或誤解,這隻會讓我們兩人感到挫敗,並延遲您獲得答案。所以,幫助我們幫助您並提供必要的輸入和代碼。請參閱「[問]」瞭解更多信息。 –

+1

當測試時,這個想法是使用一個衆所周知的小輸入,而不是繼續增長。如果它繼續增長,你的測試時間會增加,最終會超出代碼的運行耐心。另外,不要依賴明確的路徑。在標記中查找已知的路標點(通常是父節點),然後查找實際需要的子項並選擇最後一個。它需要兩個步驟,但不需要生成顯式的XPath或CSS選擇器。 –

+0

謝謝你,下次我會嘗試更加清楚 –

回答

1

您可以使用:

//*[@id="example"]/div/table/tbody/tr[last()]/td[4]/a[1] 

這會從最後一個錶行的第四td元素選擇第一個錨標記,如需要。

+0

'find(:xpath,'// * @ id =「data_main_container」]/div/table/tbody/tr [last()]/td [1]/a [2]')。click',沒有工作,並且用_Capybara :: ElementNotFound_響應。 –

+0

你能告訴我HTML嗎?以上應該工作.... – gtlambert

+0

沒有不幸的是,我不能,但我試圖用真正的號碼,而不是最後一次(),並且工作正常! –

2
這個

最簡單的解決辦法可能是

all(:xpath, '//*[@id="example"]/div/table/tbody/tr/td[4]/a[1]', minimum: 1).last 

all('#example div table tr td:nth-of-type(4) a:first-of-type', minimum: 1).last 

注:minimum: 1力量#all使用水豚等行爲,要等待至少1匹配的元素像#find一般不會

相關問題