2016-07-19 111 views
2

我有以下結構的表:如何迭代一個表?

<table> 
<tbody> 
    <tr> 
    <td> Name: </td> 
    <td> Juan </td> 
    </tr> 
    <tr> 
    <td> Name: </td> 
    <td> Alex </td> 
    </tr> 
    </tbody> 

我想通過第二tdtr迭代和搶的域名(胡安,阿萊士) 我寫了下面的代碼來做到這一點:

driver.find_elements(:xpath => "//table/tbody/tr/td[2]").each do |r| 
      puts r.text 
    end 

它不會產生任何錯誤,否unable to find element。任何東西。它只是跳過這些代碼行。它不打印任何空白。我在do循環中對它進行了測試,但沒有到達那裏。我知道xpath是正確的,我檢查了螢火蟲。我在這裏做錯了什麼?

+0

希望這有助於 - http://elementalselenium.com/tips/25-tables – Amit

+0

是你確定'find_elements'會在找不到任何東西時引發一個錯誤,而不是一個空數組?我會仔細檢查你的xpath。 –

回答

0

您可以使用Table Data和Table Row的XPath上的for循環輕鬆遍歷WebTable。看到這個示例程序 -

public class WebTable { 
    WebDriver driver; 

    @BeforeTest 
    public void openWebSite() { 

     // Open Raddif Gainer page 
     driver = new FirefoxDriver(); 
     driver.get("http://money.rediff.com/gainers/bse/daily/groupa?src=gain_lose"); 
     driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS); 
    } 

    @Test 
    public void CountRowsTest() { 

     // Store all rows in the List 
     List<WebElement> allRows = driver.findElements(By 
       .xpath("//*[@id='leftcontainer']/table/tbody/tr")); 

     // To get the all present rows in the Table 
     System.out.println("Totoal rows are -- " + allRows.size()); 
    } 

    @Test 
    public void printallrowsTest() { 

     // Store all rows in the List 
     List<WebElement> allRows = driver.findElements(By 
       .xpath("//*[@id='leftcontainer']/table/tbody/tr")); 

     // To Print the whole content of the table 
     for (int i = 0; i < allRows.size(); i++) { 
      System.out.println(allRows.get(i).getText()); 
     } 
} 

有關詳細信息,你可以參考這個驚人的教程:

http://www.seleniumbix.com/#!handle-webtables-in-selenium/c329

+0

OP要求它在ruby.You發佈在java – Madhan

+0

翻譯爲Ruby應該很容易與發佈的代碼的複雜性。 – Chris