7

Dưới đây là một ví dụ mã:Cách tìm các dòng cụ thể trong bảng bằng Selenium?

<div id="productOrderContainer"> 
<table class="table gradient myPage"> 

Vì vậy, bảng này là trong productOrderContainer có một số cột và tùy thuộc vào một vài điều sẽ có nhiều hàng mà tất cả đều có nhiều cột. Ví dụ:

Điều tôi muốn làm là lấy ví dụ đầu tiên của bảng này. (Hàng có id của như: <td rowspan="1">) Và sau đó một lần nữa ví dụ như trong này rowspan tìm kiếm một giá trị cụ thể trong một cụ <div>

Vì vậy, trong psudo mã những gì tôi muốn nói là:

Get tôi bàn , làm cho tôi hàng n'th, làm cho tôi giá trị trong <div id='something'>

Trả lời

25

bạn có thể thử sau

int index = 0; 
WebElement baseTable = driver.findElement(By.className("table gradient myPage")); 
List<WebElement> tableRows = baseTable.findElements(By.tagName("tr")); 
tableRows.get(index).getText(); 

bạn cũng có thể duyệt qua tablerows để thực hiện bất kỳ chức năng nào bạn muốn.

+0

1 trông mát mẻ! –

+0

Cảm ơn bạn, tôi sẽ thử điều này. –

+0

Điều đó không có vẻ gì cả. 'WebDriver.findElement (By.className (" "))' sẽ định vị * mọi phần tử * trong tài liệu, chứ không phải bảng OP đang tìm kiếm. Vì vậy, dòng tiếp theo sẽ thu thập tất cả '' s trong toàn bộ tài liệu, chứ không phải trong bảng cụ thể. –

2

Vâng trước đây, tôi đã sử dụng phương pháp mà bạn có thể tìm thấy bên trong WebElement:

WebElement baseTable = driver.findElement(By.tagName("table")); 
WebElement tableRow = baseTable.findElement(By.xpath("//tr[2]")); //should be the third row 
webElement cellIneed = tableRow.findElement(By.xpath("//td[2]:)); 
String valueIneed = cellIneed.getText(); 

Xin lưu ý rằng tôi tìm thấy bên trong thấy WebElement dụ.

Trên đây là mã Java, giả định rằng driver biến là dụ lành mạnh của WebDriver

+0

Điều đó sẽ không hoạt động như được viết bởi vì 'WebElement.findElement (By.xpath (...))' giải thích trình định vị XPath trong ngữ cảnh tài liệu, không phải trong ngữ cảnh phần tử giống như mọi 'By.whatever()' khác. –

5

Bạn muốn:

int rowNumber=...; 
string value = driver.findElement(By.xpath("//div[@id='productOrderContainer']/table/tbody/tr[" + rowNumber +"]/div[id='something']")).getText(); 

Nói cách khác, xác định vị trí <DIV> với id "cái gì đó" chứa trong thứ rowNumber<TR> của số <TABLE> được chứa trong số <DIV> với id "productOrderContainer", và sau đó nhận được giá trị văn bản của nó (đó là những gì tôi tin rằng bạn có nghĩa là "cho tôi giá trị trong <div id='something'>"

0
(.//*[table-locator])[n] 

nơi n đại diện cho dòng cụ thể.

1

nếu bạn muốn truy cập ô trong bảng

WebElement thirdCell = driver.findElement(By.Xpath("//table/tbody/tr[2]/td[1]")); 

Nếu bạn muốn truy cập ô trong bảng lồng nhau -

WebElement thirdCell = driver.findElement(By.Xpath("//table/tbody/tr[2]/td[2]"+//table/tbody/tr[1]/td[2])); 

Để biết thêm chi tiết chuyến thăm này Tutorial