2016-03-28 29 views
0

hücre değerini alın İşteJava. Selenium webdriver. masanın

<table class="table_results data ajax" data-uniqueId="20605"> 
    <thead> 
    </thead> 
    <tbody> 
    <tr class="odd"> 
    <td data-decimals="0" data-type="int" class="right data not_null nowrap">1</td> 
    <td data-decimals="0" data-type="string" data-originallength="5" class="data not_null text ">user1</td> 
    <td data-decimals="0" data-type="string" data-originallength="40" class="data not_null text ">e38ad214943daad1d64c102faec29de4afe9da3d</td> 
    <td data-decimals="0" data-type="string" data-originallength="14" class="data not_null text ">[email protected]</td> 
    <td data-decimals="0" data-type="string" data-originallength="6" class="data not_null text ">Smith</td> 
    <td data-decimals="0" data-type="string" data-originallength="1" class="data not_null text ">&quot;</td> 
    </tr> 
    </tbody> 
</table> 

Yani ne gerek hücre değerleri almak için benim html bir parçası. Bir şey daha, tarayıcının kaynak kodu seçeneğiyle kodu görüntülerken yukarıdaki gibi görünüyor. Firefox'un kundakçı kullanırken Ama ayrıca değerleri burada xPath çözüm olduğunu biliyoruz etiketi

<span></span> 

içinde olduğunu göstermektedir. Son 2 saat boyunca çok denedim ama hiçbiri işe yaramadı. Ve tabiki SO üzerinde benzer soruların çözümlerini gördüm ama bir şekilde benim için uygun değiller.

WebElement table_element = driver.findElement(By.xpath("//table//tbody")); 
    ArrayList<WebElement> rows = (ArrayList<WebElement>) table_element.findElements(By.tagName("tr")); 
    for (WebElement row : rows) { 
     ArrayList<WebElement> cells = (ArrayList<WebElement>) row.findElements(By.tagName("//td")); 
     for (WebElement cell : cells) { 
      System.out.println(cell.getText()); 
     } 
    } 
+0

hangi hücre değerinin istediğiniz denedin xpath' 'sağlamak ve – Andersson

+0

almak için Üzgünüz, buraya yapıştırılamıyor, böylece düzgün bir şekilde biçimlendirilmiş şekilde doldurun. – Kleeo

cevap

0

td elemanları bulup .getText() yöntemini çağırın: Ben bunu yapmaya çalışıyorum ne

İşte

List<WebElement> rows = driver.findElements(By.cssSelector("table.table_results tr")); 
for (WebElement row: rows) { 
    List<WebElement> cells = row.findElements(By.cssSelector("td.data")); 
    for (WebElement cell: cells) { 
     System.out.println(cell.getText()); 
    } 
} 

, biz o zaman tablo satırlarını bulup için CSS seçicileri kullanıyor her tablo satırı için satır hücreleri.

List<WebElement> tables = driver.findElements(By.tagName("table")); 

ayıklama onu ve üst kodunu yapabilirsiniz bundan sonra tabloyu bulun:

+0

sorusuna ekleyeceğim İlk satırda boş Liste geri döndü. Yani işe yaramıyor. Aynı problemi geri alma yolumla alıyorum. – Kleeo

+0

Belki de tablonuz bir iframe içerisindedir. Bu durumda boş bir liste alır. –

0
List<WebElement> TRCollection = driver.findElement(By.className("table_results data ajax")).findElements(By.tagName("tr")); 

for (WebElement tr : TRCollection) 
{ 
    List<WebElement> TDCollection = tr.findElements(By.tagName("td")); 
    for (WebElement td: TDCollection) 
    { 
     System.out.println(td.getText()); 
    } 
} 

deneyin ederek masa bulmak ... örnek şey gibi için

List<WebElement> TRCollection = tables[2].findElements(By.tagName("tr")); 
+0

Ben de bu şekilde denedim. 'org.openqa.selenium.InvalidSelectorException. Bileşik sınıf adlarına izin verilmiyor – Kleeo

+0

Diğer çerçevedeki tablolara bak –

+0

Nasıl kontrol edebilirim? – Kleeo

0

Önceki bir bekçiyi tamamlamak için, belirli bir satırdaki metinleri almanız gerekiyorsa, şu şekilde yapabilirsiniz:Bu durumda

string userName = "user1"; 
WebElement row = driver.findElement(By.xPath("//table[contains(@class, 'table_results')]/tbody/tr/td[2][text()='" + userName + "']/..")); 

List<WebElement> cells = row.findElements(By.cssSelector("td.data")); 
for (WebElement cell: cells) { 
    System.out.println(cell.getText()); 
} 
ben satırının ikinci sütununu almak ve adı karşılaştırmak için td[2] kullanıyorum. Başka bir alanı karşılaştırmak istiyorsanız, onu hareket ettirebilirsiniz. xpath seçici çalışıp çalışmadığını da

, sen iddia edebilir ya da siz krom konsolunu kullanarak istediğiniz tüm dönüyor ise:

$x("your xpath selector here") 
0
/** 
* match a string to the text of a table cell and return that row. 
* 
* @param table the table the data is in 
* @param cellTextEquals the text to identify the row e.g. unique ID 
* @param intCellToFind the column index in which to look for that text 
* @return table row 
*/ 
protected WebElement getRowFromTable(WebElement table, 
     String cellTextEquals, int intCellToFind) { 
    explicitWaitForElementToBeVisibleAndClickable(table); 
    WebElement tableBody = table.findElement(By.tagName("tbody")); 
    List<WebElement> rows = tableBody.findElements(By.tagName("tr")); 
    for (WebElement row : rows) { 
     List<WebElement> td = row.findElements(By.tagName("td")); 
     if (td.size() > 0 
       && td.get(intCellToFind).getText().equals(cellTextEquals)) { 
      return row; 
     } 
    } 
    return null; 
} 

/** 
* match a string to the text of a cell and return the text of 
* another specified cell in that row 
* 
* @param table the table the data is in 
* @param cellTextEquals the text to identify the row e.g. unique ID 
* @param intCellToFind the column index in which to look for that text 
* @param intCellToReturn the column index of the cell text you want to return 
* @return text of a specific cell in an html table 
*/ 
protected String getTextFromTableCell(WebElement table, String cellTextEquals, 
     int intCellToFind, int intCellToReturn) { 
    WebElement row = getRowFromTable(table, cellTextEquals, intCellToFind); 
    List<WebElement> td = row.findElements(By.tagName("td")); 
    if (td.get(intCellToFind).getText().equals(cellTextEquals)) { 
     return td.get(intCellToReturn).getText(); 
    } 
    return null; 
} 

/** 
* Gets an element from a table, either button or tagName, from a table. 
* 
* @param table the table the data is in 
* @param cellTextEquals the text to identify the row e.g. unique ID 
* @param intCellToFind the column index in which to look for that text 
* @param intCellToReturn the column index of the cell where the element is you want to return 
* @param buttonText the button text if it's a button element you want 
* @param tagName the tag name of the element i=icon, a=link etc. 
* @return Element By.tagName or button 
*/ 
protected WebElement getElementFromTableCell(WebElement table, 
              String cellTextEquals, int intCellToFind, int intCellToReturn, 
              String buttonText, String tagName) { 
    WebElement row = getRowFromTable(table, cellTextEquals, intCellToFind); 
    if (row != null) { 
     List<WebElement> td = row.findElements(By.tagName("td")); 
     if (td.get(intCellToFind).getText().equals(cellTextEquals)) { 
      if (!buttonText.equals("")) { 
       return td.get(intCellToReturn).findElement(By.xpath(
         "//button[contains(text(),'" + buttonText + "')]")); 
      } else { 
       return td.get(intCellToReturn) 
         .findElement(By.tagName(tagName)); 
      } 
     } 
    } 
    return null; 
} 
İlgili konular