如何在Selenium WebDriver中没有为表定义Id时找到表?

时间:2014-04-15 17:54:45

标签: selenium xpath selenium-webdriver web-scraping

我一直在互联网上寻找答案,似乎没有运气。

这里的问题是我尝试找到以下没有为表定义id的动态表:

<div class="modal-body">
  <table class="table table-striped data-table">
  <thead>
        <tr>
            <th dt-bSortable="false">Name</th>
            <th dt-bSortable="false">ID</th>
            <th dt-bSortable="false">Email</th>
       </tr>
        </thead>
        <tbody>


            <tr>
                <td>NameA</td>
                <td>111</td>
                <td>nameA@test.com</td>
            </tr>
                <tr>
                <td>NameB</td>
                <td>222</td>
                <td>nameB@test.com</td>
            </tr>
                ...

我需要的是基于给定的ID,我可以找到相应的名称和电子邮件。但首先,我应该找到桌子。我尝试了以下方法,但它们都没有工作:

WebElement table = driver.findElement(By.className("table table-striped data-table"));
WebElement table = driver.findElement(By.xpath("//table[@class='table table-striped data-table']"));
WebElement table = driver.findElement(By.cssSelector("table.table-striped"));

我还尝试通过以下方式直接获取所有行:

List<WebElement> rows = driver.findElements(By.xpath("//table[@class='table table-striped data-table']/tbody/tr"));

rows.isEmpty()总是返回true。

请帮我解决这个问题。提前感谢任何建议。

1 个答案:

答案 0 :(得分:0)

我原本预计

WebElement table = driver.findElement(By.cssSelector("table.table-striped"));

工作,因为这意味着'找到带有table-striped类的表元素'。但是,如果你打算'找到带有类表和class table-striped'的元素(看起来你是基于你的其他尝试),那么命令就是

WebElement table = driver.findElement(By.cssSelector(".table.table-striped"));

请注意额外的'。'。