获取Web表中的行数 - Selenium WebDriver Java
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取Web表中的行数 - Selenium WebDriver Java相关的知识,希望对你有一定的参考价值。
我正在使用java工作selenium webdriver。我正面临一个问题。我有一个Web表,我有添加事件功能的测试用例,它成功地在表中添加了事件。现在我想断言/验证我是否在我的表中添加了添加的事件(因为如果功能被破坏,那么日期将不会添加到表中,并且我可能故意失败该测试)。在测试用例开始之前,事件的数量是未知的。我对此测试用例验证的逻辑如下:
- 在表中添加事件。添加事件的代码是:
public void addIndividualEvent(String eventDate, String eventName) throws Exception { driver.findElement(individualEventDate).sendKeys(eventDate); driver.findElement(individualEventName).sendKeys(eventName); driver.findElement(addIndividualEventBtn).click(); }
现在,在此步骤之后,表中可能已存在多个事件。所以我的下一步将是。 - 查找表中的行数。
- 构造一个遍历每一行的for循环并获取日期字段的文本。
- 将for循环的结果添加到列表中。
- 然后是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());
它将返回该表中的行数(TR
s)。
你可以使用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的主要内容,如果未能解决你的问题,请参考以下文章