如何迭代表?

时间:2016-07-19 23:04:41

标签: ruby selenium xpath selenium-webdriver

我有一个以下结构的表:

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

我想迭代td中的第二个tr并抓住名字(Juan,Alex) 我编写了以下代码来执行此操作:

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

它不会产生任何错误,没有unable to find element。任何东西。它只是跳过这些代码行。它也不打印任何空白。我在do循环中对它进行了测试,并没有到达那里。我知道xpath是正确的,我检查了萤火虫。我在这里做错了什么?

1 个答案:

答案 0 :(得分: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