2013-02-12 21 views

risposta

16

Prova qualche cosa come questa

int rowCount=driver.findElements(By.xpath("//table[@id='DataTable']/tbody/tr")).size(); 

int columnCount=driver.findElements(By.xpath("//table[@id='DataTable']/tbody/tr/td")).size(); 

FYI: Questa è l'implementazione in Java.

+1

sto usando il driver web Python. Questa funzione size() non funziona lì. –

+1

Vedere questo link: http://selenium.googlecode.com/git/docs/api/py/webdriver_remote/selenium.webdriver.remote.webelement.html#selenium.webdriver.remote.webelement.WebElement.find_elements_by_xpath ---- ---> Penso che in python len sia il metodo per trovare la lunghezza/dimensione della lista – Santoshsarma

2

Il selenio ha una funzione per il conteggio del risultato XPath, vedere http://release.seleniumhq.org/selenium-core/1.0/reference.html. In base a questo puoi usare storeXpathCount.

Sto usando la classe DefaultSelenium dal selenio-java-client-pilota, dove posso usare (anche in java) il seguente:

int rowCount = selenium.getXpathCount("//table[@id='Datatable']/tbody/tr").intValue() 
7

risposta di Santoshsarma è vicino a correggere per Java, ma è conterrà il numero di celle anziché il numero di colonne. Ecco una versione di Python che conterà il numero di colonne in prima fila:

row_count = len(driver.find_elements_by_xpath("//table[@id='DataTable']/tbody/tr")) 
column_count = len(driver.find_elements_by_xpath("//table[@id='DataTable']/tbody/tr/td")) 

Se la tabella ha un colpo di testa si potevano contare le colonne lì, invece.

Non ho provato a utilizzare storeXpathCount.

2

È possibile farlo utilizzando find_elements_by o execute_script.

Recupero conteggio applicando len sul risultato di find_elements_by è il modo corretto, ma in altra sua volta ottenere conteggio delle righe e colonne utilizzando execute_script è abbastanza veloce quindi ottenere len dal risultato di find_elements_by chiamata di metodo:

rows_count = driver.execute_script("return document.getElementsByTagName('tr').length") 
columns_count = driver.execute_script("return document.getElementsByTagName('tr')[0].getElementsByTagName('th').length") 

di seguito è metriche di performance di utilizzare find_elements_by vs execute_script approccio:

from timeit import timeit 

# Time metrics of retrieving 111 table rows 
timeit(lambda:driver.execute_script("return document.getElementsByTagName('tr').length"), number=1000) 
# 5.525 
timeit(lambda:len(driver.find_elements_by_tag_name("tr")), number=1000) 
# 9.799 
timeit(lambda:len(driver.find_elements_by_xpath("//table/tbody/tr")), number=1000) 
# 10.656 

# Time metrics of retrieving 5 table headers 
timeit(lambda:driver.execute_script("return document.getElementsByTagName('tr')[0].getElementsByTagName('th').length"), number=1000) 
# 5.441 
timeit(lambda:len(driver.find_elements_by_tag_name("th")), number=1000) 
8.604 
timeit(lambda:len(driver.find_elements_by_xpath("//table/tbody/th")), number=1000) 
# 9.336 
0

Per gli utenti Python il modo più semplice per contare un tag è il seguente.

!#use find_elements_by_xpath 

test_elem = self.driver.find_elements_by_xpath("//div[@id='host-history']/table[1]/tbody[1]/tr") 

!#then check the len of the returnes list 

print (len(test_elem)) 
Problemi correlati