2014-12-21 46 views
0

我正在使用selenium webdriver和java編寫測試腳本,其中包含具有多行列的表的頁面。這些行具有相同的樣式和類。但是,一些行是隱藏的,其中一些顯示在頁面上。有〜1800行,其中只有7行顯示在頁面上。現在,我必須在可視行上處理流程數據,我已經創建了xpath,但是需要很長時間來驗證頁面上哪些行號是可見的,並且如果可見,那麼繼續執行腳本,否則請檢查下一行。這是我使用for循環實現的,但它太耗時。那麼在行中有一個下拉選項,但這些下拉列表的ID是動態的基於錶行像testid_0 - 第1行,testid_1 - 第2行。我的問題是有什麼辦法可以得到像行的可見行數7,第100行,第500行可以在頁面上看到,而不需要花費時間或使用for循環?或者我們可以得到使用硒運行的JavaScript並返回頁面上顯示的行數。selenium webdriver在表中獲得可見行數

+0

行如何隱藏?在'tr'中使用'style =「display:none;」''? –

+0

是的魯斯蘭,它具有相同的風格,你提到(class =「row」style =「display:none;」)tr –

回答

2

可以使用適當的xpath,像過濾隱形tr

//table/tbody/tr[not(contains(@style,'display: none;'))]

+0

我試過了,它也給了我可見的行。但是,我必須處理tr/td數據。也就是說,如果tr是可見的而不是獲取每個td的數據,比如tr/td [1]/span/text(),tr/td [2]/span/text()在相同的tr/td [7]中可用。你給出的xpath示例會給我提供tr中的數據,但是我將如何從相同tr的下拉菜單中選擇選項? –

+0

您可以使用我的xpath獲得'列表',然後使用像'./td [1]/span/text()' –

+0

這樣的xpaths處理每個元素。所以最終的xpath查詢將如下所示:// table/tbody/tr [not(contains(@ style,'display:none;'))]/td [1]/span/text()this ..好吧,讓我試試看,感謝您的幫助和輸入。謝謝 –

2

您也可以嘗試下面的代碼來獲取可見的行數(假設有在只有一個表網頁):

int count = 0; 
List<WebElement> rows = driver.findElements(By.xpath("//table//tr")); 
for(WebElement row: rows){ 
    if(row.isDisplayed()) 
    count++; 
} 
System.out.println("The number of rows that are visible is: "+ count); 
+0

我試過了,它需要很長時間才能找到表中所有可見的行,大約需要5分鐘來驗證所有1800行的表。然而,@Ruslan輸入工作速度非常快,並提供所需的輸出... :) –

+1

哦!無論如何,這只是一個選擇。而且,我同意@魯斯蘭的有效之一.. :) – Subh

相關問題