Selenium自動化測試:如何驗證網頁WebTable的值

Selenium自動化測試:如何驗證網頁WebTable的值

這篇文章主要說明當遇到網頁中的 Table時,如何取得 Table內所有的內容並且加以驗證?

有些網頁呈現資料結果的方式是用Table的形式,Selenium如何讀取Table 資料值?

我們探討 Table的HTML關係,最後提供 Python 與Java 的完整程式範例。

 測試情境

這個網址 http://webdatacommons.org/webtables/

網頁中有一個 Table,內容如下。我們要如何利用 Selenium 將 Table 內容的值取出呢?

WebTable

 

Table 結構

要取得所有HTML Table 的值,首先要先了解 Table 的結構

通常由 TR 與 TD所組成。因此對於 Selenium來說,主要就是依據 TR 與 TD對於每一個值做定位

TR決定有幾筆資料 Rows,利用 Selenium 的 find_elements_by_tag_name(“tr”),將所有 rows 取得

TD決定每一筆有幾個欄位columns,利用Selenium的find_elements_by_tag_name(“td”)取得所有的欄位

 

Python程式碼範例

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

from selenium import webdriver
from array import *
import time, unittest

class WebTableTest (unittest.TestCase):
	def setUp(self)	:
		self.driver = webdriver.Chrome()
		self.driver.get("http://webdatacommons.org/webtables/")

	def test_web_table(self):
		driver = self.driver

		simpleTable = driver.find_element_by_xpath(".//*[@id='toccontent']/table[1]/tbody" )

		#Get all rows
		rows = simpleTable.find_elements_by_tag_name("tr")
		self.assertEquals(3, len(rows))

		#Print data from each row
		for row in rows:
			cols = row.find_elements_by_tag_name("td")

			line = []
			for col in cols:
				line.append(col.text)
			print "\t".join(line)


	def tearDown(self):
		self.driver.close()

if __name__ == "__main__":
	unittest.main()

[/pastacode]

Java程式碼範例

[pastacode lang=”java” message=”” highlight=”” provider=”manual”]

package mySelenium;

import java.util.Arrays;
import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.WebElement;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;

public class SampleWebTable {
	
	protected WebDriver driver;
	
	@Before
	public void setUp() {
		//System.setProperty("webdriver.chrome.driver", "d:\\chromedriver.exe");
		/*
		 DesiredCapabilities capabilities = DesiredCapabilities.chrome();
		  capabilities.setCapability("chrome.switches", Arrays.asList("--proxy-server=http://rproxy2.caib.es:3128"));
		*/
		driver = new FirefoxDriver();
		
		driver.get("http://webdatacommons.org/webtables/");
	}
	
	@Test
	public void testWebTable() { 
        
		WebElement simpleTable = driver.findElement(By.xpath(".//*[@id='toccontent']/table[1]/tbody"));
		
		//Get all rows
		List<WebElement> rows = simpleTable.findElements(By.tagName("tr"));
		assertEquals(3, rows.size());
		
		//Print data from each row
		for (WebElement row : rows) {
			List<WebElement> cols = row.findElements(By.tagName("td"));
			for (WebElement col : cols) {
				System.out.print(col.getText() + "\t");
			}
			System.out.println();
		}
    }
	
	@After
	public void tearDown() {
		driver.quit();		
	}
} 

[/pastacode]

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *