1. 程式人生 > >selenium頁面元素定位方法(5)——表格的定位

selenium頁面元素定位方法(5)——表格的定位

被測試html程式碼:

<!DOCTYPE html>
<html>
<body>
	<table width="400" border="1" id="table"></table>
	<tr>
		<td align="left">消費專案....</td>
		<td align="right">一月</td>
		<td align="right">二月</td>
	</tr>
	<tr>
		<td align="left">衣服</td>
		<td align="right">1000</td>
		<td align="right">500</td>
	</tr>
	<tr>
		<td align="left">化妝品</td>
		<td align="right">3000</td>
		<td align="right">500</td>
	</tr>
	<tr>
		<td align="left">食物</td>
		<td align="right">3000</td>
		<td align="right">650</td>
	</tr>
	<tr>
		<td align="left">總計</td>
		<td align="right">7000</td>
		<td align="right">1150</td>
	</tr>
</body>
</html>

遍歷表格的全部單元格

       先定位表格的頁面元素物件,在表格物件中,把所有tr元素物件儲存到list物件中。使用for迴圈,把物件從rows物件中取出來,使用findElements函式將表格行物件中的所有單元格物件儲存到名為cols的List中。在使用for迴圈讀取。

	@Test
	public void LocateTable(){
		WebElement tableElement=driver.findElement(By.id("table"));
		List<WebElement> rows=tableElement.findElements(By.tagName("tr"));
		for (int i = 0; i < rows.size(); i++) {
			List<WebElement> cols=rows.get(i).findElements(By.tagName("td"));
			for (int j = 0; j < cols.size(); j++) {
				System.out.println(cols.get(j).getText()+"\t");
			}
			System.out.println("");
		}
	}

定位表格中的某個單元格

       在測試網站的頁面中,定位顯示錶格的第二行第二列表格。

        XPath表示式://*[@id='table']/tbody/tr[2]/td[2]

        CSS表示式:html body table#table tbody tr:nth-child(2) td:nth-child(2)

        java例項程式碼:

WebElement tableElement=driver.findElement(By.cssSelector("html body table#table tbody tr:nth-child(2) td:nth-child(2)"));
WebElement cell=driver.findElement(By.xpath("//*[@id='table']/tbody/tr[2]/td[2]"));

        表格的結構比較複雜,將分割成三個部分:題頭、正文和腳註。而這三部分分別用:thead,tbody,tfoot來標註。thead用來放標題之類的東西,tbody放資料本體,tfoot放表格的腳註之類……因此在書寫表示式時需要先進入tbody部分才能讀取tr和td。

定位表格中的子元素

        被測試網頁程式碼:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
	<table width="400" border="1" id="table">
	<tr>
		<td align="left">消費專案....</td>
		<td align="right">一月</td>
		<td align="right">二月</td>
	</tr>
	<tr>
		<td align="left">衣服<input type='checkbox'>外套</input><input type='checkbox'>內衣</input></td>
		<td align="right">1000</td>
		<td align="right">500</td>
	</tr>
	<tr>
		<td align="left">化妝品<input type='checkbox'>面霜</input><input type='checkbox'>沐浴露</input></td>
		<td align="right">3000</td>
		<td align="right">500</td>
	</tr>
	<tr>
		<td align="left">食物<input type='checkbox'>主食</input><input type='checkbox'>蔬菜</input></td>
		<td align="right">3000</td>
		<td align="right">650</td>
	</tr>
	<tr>
		<td align="left">總計</td>
		<td align="right">7000</td>
		<td align="right">1150</td>
	</tr>
	</table>
</body>
</html>

        定位到表格中第三行的“面霜”複選框。

        XPath表示式://td[contains(text(),'化妝']/input[1]

        java例項程式碼:

WebElement cell=driver.findElement(By.xpath("//td[contains(text(),'化妝']/input[1]"));
        表示式中的//td[contains(text(),'化妝']表示模糊匹配到包含“化妝”關鍵字的單元格,/input[1]表示單元格里面的第二個input元素。