2015-10-20 115 views
1

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

  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. 构建循环遍历每一行并获取日期字段的文本。
  4. 将for循环的结果添加到列表中。
  5. Then 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();,但是这返回了表格的尺寸而不是实际的数量。

任何人都可以告诉我如何得到没有行?由于

+0

你只在xpath中存储一个值?或者那是列表? –

+0

@HelpingHands当我在浏览器中通过firepath搜索这个xpath时,上面的xpath给了我(加亮)所有行。我需要计算那些突出显示的行,但我不知道如何实现这一点。 – Uziii

+1

我认为你应该数不清。行列表使用列表 rows = driver.findElements(by.tagname(“tr”)); rows.size();' –

回答

-1

你可以使用XPath:

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

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

+0

这不需要计数是一个函数吗? – Uziii

+0

Count是一个内置的XPath函数 - 它计算节点集中的节点/元素的数量 – gtlambert

+0

您能否提供一些有关此内置函数的文档?它会帮助我很多。 – Uziii

-1

通过你的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.   
    } 
+1

我不确定这段代码应该回答什么问题。 OP提供了一个XPath和HTML,你为什么要使用其他一些随机表? – JeffC

+0

xpath提供了我没有的页面的链接。示例中的* parentTable *引用链接到模拟所描述的问题格式的页面。通过使用正在使用的URL替换URL,并替换当前使用的父表与注释掉的问题的父表是相同的。我发现这并不完全明显,所以我附加了一个额外的案例来帮助并调出更改以证明使用情况。谢谢你指出。 – Jeremiah

+0

再次回顾一下,我同意我可以以更有用的方式呈现信息。 @JeffC我感谢你提出这个问题,并且我会尽量让它在未来更加直接。再次感谢您指出。 – Jeremiah

0

假设你的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)的数量在该表中。

1

为了让行,作出以下 使用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()); 
    } 
相关问题