2015-10-20 159 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()); 
    } 
相關問題