2016-03-11 52 views
0

我有2個測試用例,其中我想選擇html並需要獲取所有td的值

1.需要選擇網頁中顯示的第二個html並遍歷td並獲得值
2.需要選擇網頁中顯示的第三個html並遍歷td並獲取該值。
下面是HTML
在Selenium Webdriver中通過html td的迭代

<html> - 1st html in the page 
<body> 
<table> 
<tbody> 
<tr> 
<td>..</td> 
.... 
</tr> 
..... 
.... 
</tbody> 
</table> 
</body> 
</html> 


<iframe> - Parent 
<iframe tabindex="-1" frameborder="no" width="100%" src="about:blank" class="active"> 
<html> - 2nd html in the page 
<body> 
<table> 
<tbody> 
<tr> 
<td>..</td> 
<td>..</td> 
<td>..</td> 
</tr> 
<tr> 
<td>..</td> 
<td>..</td> 
<td>..</td> 
</tr> 
<tr> 
<td>..</td> 
<td>..</td> 
<td>..</td> 
</tr> 
.... 
.... 
..... 
<tbody> 
</table> 
</body> 
</html> 
</iframe> 

<iframe tabindex="-1" frameborder="no" width="100%" src="about:blank" class="active"> 
<html> - 3rd html in the page 
<body> 
<table> 
<tbody> 
<tr> 
<td>..</td> 
<td>..</td> 
<td>..</td> 
</tr> 
<tr> 
<td>..</td> 
<td>..</td> 
<td>..</td> 
</tr> 
<tbody> 
</table> 
</body> 
</html> 
</iframe> 
</iframe> 

僅供參考,我發現了元素

driver.SwitchTo().Frame(); - outerframe 
driver.SwitchTo().Frame(); - InnerFrame 

我嘗試了下面一個找到元素之前切換到IFRAME,但它是選擇第一html元素在網頁上。

List<IWebElement> elements = driver.FindElement(By.XPath("/html/body/table/tbody")).FindElements(By.TagName("tr")).ToList(); 

有人能幫我解決嗎?
感謝

+0

是你在正確的軌道上,你必須switchToFrame去到其他內容。我永遠不會使用XPATH。我使用例如currentElement.FindElements(By.Tagname(「td」));如果currentElement是Table元素或TableBody元素,這將向我顯示錶中的所有TD。 –

回答

1

試試這個:

var frames = driver.FindElements(By.TagName("iframe")).ToList() 
    driver.switchTo().frames[1]; 
    tds = WebDriver.FindElements.(By.Tagname("td");; 
    var td = tds.Where(ele=>ele.Text=="Something").ToList(); 
+0

在找到像這個元素之前,我已經切換到框架了.SwitchTo()。Frame(driver.FindElement(By.XPath(「// iframe [contains(@ src,'WorkflowActivities.aspx')]」) )); - 外框 driver.SwitchTo()。Frame(driver.FindElement(By.XPath(「// iframe [@id ='ProxyPageRetriever']」))); - innerframe – Aishu

+0

@ john - 我不清楚你的答案 – Aishu

+0

不要使用XPATH使用TagName例如你可能會更好地爲你服務 –

0

你應該使用類似的代碼如下:

List<WebElement> elements = driver.findElements(By.xpath("")); 
for(WebElement el: elements){ 
    String value = el.findElement(By.tagName(td)).getText(); 
    System.out.println(value); 
} 

雖然第一迭代幀TD的你應該選擇框然後應用與上面相同的代碼

+0

driver.findElements(By.xpath(「」)) - 你試圖什麼在這裏說?...請閱讀我的問題,我想只選擇網頁上顯示的第二個HTML,並迭代td的 – Aishu

+0

是的,我正在說相同的,第二個html在一幀下,你應該先選擇幀,然後,爲tr創建xpath並使用findElements函數計算有多少tr,然後您可以遍歷tr並找到td值。 –

+0

findelements將返回一個集合。如果我將Xpath選中,則表示它將會給你的結果的集合不是一個特定的 – Aishu