2016-07-12 34 views
0

我想找到一種方法來返回基於其xpath的HTML子標記的索引。如何在Selenium WebDriver中找到HTML子標籤的索引?

例如,在頁面右側的軌道,我有三個要素:

//*[@id="ctl00_ctl50_g_3B684B74_3A19_4750_AA2A_FB3D56462880"]/div[1]/h4 

//*[@id="ctl00_ctl50_g_3B684B74_3A19_4750_AA2A_FB3D56462880"]/div[2]/h4 

//*[@id="ctl00_ctl50_g_3B684B74_3A19_4750_AA2A_FB3D56462880"]/div[3]/h4 

假設我已經找到了第一個元素,我想回到標籤的div內其數量是1.我該怎麼做?

我參考了此前的文章(How to count HTML child tag in Selenium WebDriver using Java),但仍然無法弄清楚。

+0

究竟是你的任務是什麼?你選擇其中一個h4的另一個查詢,現在想知道它的索引?或者你檢索另一個選擇器的元素列表,這是單獨的xpath的? – Abaddon666

+0

我想寫一個方法,它會返回給定報告xpath的右側導航欄中的報告索引。例如,假設報告名稱是「hello1」。我的方法將採用報告的名稱,即「hello 1」,並將此報告的索引返回到右側導軌上。 「你好1」可能是第一個在右側軌道上,或第二個,或第三個。爲了得到它的索引,我需要檢索它的xpath,因爲xpath中的div標籤有索引。我的邏輯有道理嗎? – bluecheese2008

+0

編寫這些xpath表達式的人(或許是你)提出了索引權? –

回答

0

您可以在XPath中選擇前述兄弟你當前這樣之前得到的所有報告:

//h4[contains(text(),'hello1')]/preceding-sibling::h4 

現在你只需要算你多少找到加上當前和你有你的指數。

另一種選擇是一次選擇所有報告並循環檢查其內容。他們總是以與他們相同的順序進來。

的Java它看起來是這樣的:

List<WebElement> reports = driver.findElements(By.xpath("//*[@id='ctl00_ctl50_g_3B684B74_3A19_4750_AA2A_FB3D56462880']/div/h4") 
for(WebElement element : reports){ 
    if(element.getText().contains("report1"){ 
     return reports.indexOf(element) + 1; 
    } 
} 

否則,你將不得不自己來解析XPath來提取值(見LG3527118對這個答案)。

+0

你好!非常感謝你!我也在考慮循環。 – bluecheese2008

+0

其實我試過你的代碼的第一行,列表 ....並沒有工作,直到我將「列表」更改爲「IReadOnlyList」。你碰巧知道爲什麼它是這樣嗎? – bluecheese2008

+0

你的意思是什麼不起作用? [官方API文檔](http://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebDriver.html#findElements-org.openqa.selenium.By-)定義了返回值作爲'List '。 – Abaddon666

0

你可以得到數使用正則表達式:

var regExp = /div\[([^)]+)\]/; 
var matches = regExp.exec("//[@id=\"ctl00_ctl50_g_3B684B74_3A19_4750_AA2A_FB3D56462880\"]/div[2]/h4"); 

console.log(matches[1]); \\ returns 2 
+1

非常感謝! – bluecheese2008

相關問題