前言
瀏覽器網頁常常會包含各類表格,自動化測試工程師可能會經常操作表格中的行,列以及某些特定的單元格,因此熟練掌握表格的定位方法是自動化測試實施過程中必要的技能。
被測試網頁的HTML代碼

<!DOCTYPE html> <html> <body> <meta charset="UTF-8"> <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">衣服</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.00元</td> </tr> <tr> <td align="left">總計</td> <td align="right">7000元</td> <td align="right">1150元</td> </tr> </table> </body> </html>
①遍歷表格所有單元格
實例代碼
1 from selenium import webdriver 2 driver = webdriver.Firefox() 3 driver.get(r'file:///D:/pythonSeleniumTestCode/pythonStu/src/table.html') 4 #id定位方式獲取整個表格對象 5 table = driver.find_element_by_id('table') 6 #通過標簽名獲取表格中所有行 7 trlist = driver.find_elements_by_tag_name('tr') 8 print(len(trlist)) 9 for row in trlist: 10 #遍歷行對象,獲取每一個行中所有的列對象 11 tdlist = row.find_elements_by_tag_name('td') 12 for col in tdlist: 13 print(col.text + '\t',end='') 14 print('\n') 15 driver.quit()
輸出結果
消費項目 一月 二月 衣服 1000元 500元 化妝品 3000元 500元 食物 3000元 650.00元 總計 7000元 1150元
代碼說明
1.先獲取整個表格的頁面對象
table=driver.find_element_by_id('table')
2.在表格頁面元素對象中,獲取所有tr元素對象,並存儲在trlist中
trlist=table.find_elements_by_tag_name('tr')
3.循環遍歷存儲表格行對象的trlist對象,每獲取一行中所有的單元格對象(存儲到tdlist對象中),就循環遍歷一次,並將每個單元格的文本內容輸出
for row in trlist: #遍歷行對象,獲取每一個行中所有的列對象 tdlist = row.find_elements_by_tag_name('td') for col in tdlist: print(col.text + '\t',end='') print('\n')
以上步驟完成表格中所有單元格的遍歷輸出,通過遍歷可以實現讀取任意單元格內容的操作。
②定位表格中的某個元素
目的
定位表格中第二行第二列單元格
XPATH表達式
//table[@id='table']/tbody/tr[2]/td[2]
python定位語句:
element = driver.find_element_by_xpath('//table[@id='table']/tbody/tr[2]/td[2]')
CSS表達式:
table#table>tbody>tr:nth-child(2)>td:nth-child(2)
python定位語句:
element = driver.find_element_by_css_selector('table#table>tbody>tr:nth-child(2)>td:nth-child(2)')
③定位表格中的子元素
被測試網頁HTML代碼

<!DOCTYPE html> <html> <body> <meta charset="UTF-8"> <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.00元</td> </tr> <tr> <td align="left">總計</td> <td align="right">7000元</td> <td align="right">1150元</td> </tr> </table> </body> </html>
目的
在被測網頁中,定位表格中第三行中的第一個“面霜”文字前的復選框。
//td[contains(.,'化妝品')]/input[1]
python定位語句:
element = driver.find_element_by_xpath('//td[contains(.,'化妝品')]/input[1]')
代碼說明
先找到包含元素的單元格,在此單元格中再尋找子元素即可。表達式//td[contains(.,'化妝品')]表示模糊匹配文本內容包含“化妝”關鍵字的單元格td元素,//input[1]表示定位td下的第一個input子元素。
總結
這篇隨筆寫的很簡單,實際工作中的表定位可能也會有各種各樣的情況,但是這篇隨筆確實基礎,希望大家多練習吧。如果文章中有什么錯誤或者建議,評論給我,我會最快的速度回復你,謝謝!