获取Web表中的行数 - Selenium WebDriver Java

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取Web表中的行数 - Selenium WebDriver Java相关的知识,希望对你有一定的参考价值。

我正在使用java工作selenium webdriver。我正面临一个问题。我有一个Web表,我有添加事件功能的测试用例,它成功地在表中添加了事件。现在我想断言/验证我是否在我的表中添加了添加的事件(因为如果功能被破坏,那么日期将不会添加到表中,并且我可能故意失败该测试)。在测试用例开始之前,事件的数量是未知的。我对此测试用例验证的逻辑如下:

  1. 在表中添加事件。添加事件的代码是: public void addIndividualEvent(String eventDate, String eventName) throws Exception { driver.findElement(individualEventDate).sendKeys(eventDate); driver.findElement(individualEventName).sendKeys(eventName); driver.findElement(addIndividualEventBtn).click(); } 现在,在此步骤之后,表中可能已存在多个事件。所以我的下一步将是。
  2. 查找表中的行数。
  3. 构造一个遍历每一行的for循环并获取日期字段的文本。
  4. 将for循环的结果添加到列表中。
  5. 然后是Assert.assertEquals(List,eventDate);会告诉我我添加的事件是否在表格中。

现在,下面是我网站中表格的html代码。

<table class="table table-condensed table-hover event-list">
    <tbody>
        <tr class="study-event-row ng-scope" ng-repeat="event in events | orderBy:'-date'">
        <tr class="study-event-row ng-scope" ng-repeat="event in events | orderBy:'-date'">
        <tr class="study-event-row ng-scope" ng-repeat="event in events | orderBy:'-date'">
    </tbody>
</table>

我能够构建xpath,突出显示表中可用的所有行。

xpath = //table[@class='table table-condensed table-hover event-list']/tbody/tr

现在我面临的问题是我不知道如何使用这个xpath来获取我的表中的行数。我试图使用xpath.getSize();,但这返回了表的尺寸而不是实际的数量。

谁能告诉我怎样才能获得行数?谢谢

答案

要获取行,请执行以下操作 - 使用CSS选择器:

List<WebElement> rows = driver.findElement(By.cssSelector("[class='table table-condensed table-hover event-list'] tr"));

或者如果你必须使用XPATH,那么:

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

这将返回WebElements列表。你可以在这里得到点数:

int count = rows.size();
System.out.println("ROW COUNT : "+count);

然后,您可以获取每个元素的文本,并断言它是否符合预期。正如您所说,所有元素的文本应该相同,那么您可以执行以下操作:

for(WebElement e : rows) {
        assertEquals("expected text", e.getText());
    }
另一答案

假设您的XPath有效,您可以这样做......

List<WebElement> rows = driver.findElements(By.xpath("//table[@class='table table-condensed table-hover event-list']/tbody/tr"));
System.out.println(rows.size());

它将返回该表中的行数(TRs)。

另一答案

你可以使用XPath:

count(//table[@class='table table-condensed table-hover event-list']//tr)

这将使用tr计算所有table元素,这些元素是@class="table table-condensed table-hover event-list"元素的后代

另一答案

通过xpath解析表对象,然后使用该WebElement作为SearchContext并获取所有TR元素。返回列表的大小应该告诉您可见的行数。

int EXPECTED_ROW_COUNT = 3; 

/**
 * Test case for counting the number of visible rows in a table.
 * @see "http://stackoverflow.com/questions/33233883/getting-the-count-of-rows-from-a-web-table-selenium-webdriver-java"
 *  @author http://stackoverflow.com/users/5407189/jeremiah
 */
@Test
public void testCountRows() {
    WebDriver wd = new FirefoxDriver();
    wd.get("http://www.w3schools.com/html/tryit.asp?filename=tryhtml_table");
    WebDriverWait wait = new WebDriverWait(wd, 10);
    wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("iframeResult"));//Specific to test location @ w3schools!
    WebElement parentTable = wd.findElement(By.xpath("html/body/table/tbody")); 
    //WebElement parentTable = wd.findElement(By.xpath("//table[@class='table table-condensed table-hover event-list']/tbody"));


    //Now use the parentTable as the root of the search for all 'tr' children.
    List<WebElement> rows = parentTable.findElements(By.xpath("./tr"));
    Assert.assertTrue(EXPECTED_ROW_COUNT == rows.size());
    }

   /**
     * Test that you can use to direct at your url and interact with rows.
     */
    @Test
    public void testYourRowCount() {
        WebDriver wd = new FirefoxDriver();
        //FIXME
        wd.get("yourURLHere");
        WebElement parentTable = wd.findElement(By.xpath("//table[@class='table table-condensed table-hover event-list']/tbody"));
        //Now use the parentTable as the root of the search for all 'tr' children.
        List<WebElement> rows = parentTable.findElements(By.xpath("./tr"));
        //FIXME:  Do stuff with the rows.        
    }

以上是关于获取Web表中的行数 - Selenium WebDriver Java的主要内容,如果未能解决你的问题,请参考以下文章

获取 BigQuery 表中的行数(流式缓冲区)

如何使用 PHP 获取 MySQL 表中的行数?

SQL 计算表中的行数

获取具有升序值的行数,如 1,2,3,直到发生中断,如表中的 1,2,3,7,8,9,10

jQuery:计算表中的行数

如何在不使用count(*)的情况下在greenplum中查找表中的行数