Selenium自動化測試:如何驗證網頁WebTable的值
這篇文章主要說明當遇到網頁中的 Table時,如何取得 Table內所有的內容並且加以驗證?
有些網頁呈現資料結果的方式是用Table的形式,Selenium如何讀取Table 資料值?
我們探討 Table的HTML關係,最後提供 Python 與Java 的完整程式範例。
測試情境
這個網址 http://webdatacommons.org/webtables/
網頁中有一個 Table,內容如下。我們要如何利用 Selenium 將 Table 內容的值取出呢?
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]