selenium自動化測試入門 層級定位與定位一組元素
一、層級定位(二次定位)
在實際測試過程中,一個頁面可能有多個屬性基本相同的元素,如果要定位到其中的一個,這時候需要用到層級定位。先定位其父元素,然後再通過父元素定位該元素。
示例:通過層級定位搜狗輸入框
driver = webdriver.Chrome()ndriver.maximize_window()ndriver.get(rhttps://www.sogou.com/)nform_element = driver.find_element_by_id(sf) # 獲取form表單元素nform_element.find_element_by_id(query).send_keys(selenium) # 通過表單定位輸入框nform_element.find_element_by_id(stb).click() # 通過表單定位搜索按鈕ntime.sleep(3)ndriver.quit()n
如上代碼,我們先定位到了form表單,然後通過表單定位下面的輸入框與按鈕。
注意:上面示例只通過兩層定位到了元素,層級定位不一定定位兩次,我們可以定位多次。
二、定位一組元素
而當我們需要獲取多個屬性相同的對象,並且需要批量操作該對象時,就會使用find_elements定位一組元素。
創建以下html文件,文件名checkbox.html
<form class="form-horizontal">n <div class="control-group">n <label class="controllabel" for="China">中國人</label>n <div class="controls">n <input type="checkbox" id="China"/>n </div>n </div>n <div class="control-group">n <label class="controllabel" for="American">美國人</label>n <div class="controls">n <input type="checkbox" id="American"/>n </div>n </div>n <div class="control-group">n <label class="controllabel" for="German">德國人</label>n <div class="controls">n <input type="checkbox" id="German"/>n </div>n </div>n <div class="button">n <input type="submit" id="submit"/>n </div>n</form>n
示例:全選上面的多選框
from selenium import webdrivernimport timenndriver = webdriver.Chrome()ndriver.maximize_window()ndriver.get(rE:xxxcheckbox.html) # 打開checkbox.html文件,使用絕對地址ncheckboxs = driver.find_elements_by_xpath(//input[@type="checkbox"]) # 獲取批量的對象nfor checkbox in checkboxs: # 循環控制n if not checkbox.is_selected(): # 判斷多選框是否被選中n checkbox.click() # 單擊ntime.sleep(3)ndriver.quit()n
三、綜合運用
當我們需要定位一組元素時,頁面上相似的元素會很多,這時我們需要和層級一定一起使用。先定位到該組元素的父元素,然後通過父元素定位其子孫元素。
示例1:獲取搜狗微信頁面搜索熱詞的內容
driver = webdriver.Chrome()ndriver.maximize_window()ndriver.get(rhttp://weixin.sogou.com/)ntopele = driver.find_element_by_id(topwords) # 搜索熱詞的父元素ntops = topele.find_elements_by_tag_name(a) # 二次批量定位熱詞元素nfor top in tops: # 循環獲取元素n print(top.text) # 列印文本內容ndriver.quit()n
UI自動化測試中對於表格的定位是個難點,怎麼樣快速獲取表格數據,請看下面幾個示例。
示例2:定位表格獲取表頭
driver = webdriver.Chrome()ndriver.maximize_window()ndriver.get(rhttp://www.w3school.com.cn/cssref/css_selectors.asp)n# //table[@class="dataintable"]//tr[1]//th 獲取表頭元素ntable_header = driver.find_elements_by_xpath(//table[@class="dataintable"]//tr[1]//th)nfor header in table_header: # 循環獲取元素n print(header.text) # 列印文本內容ndriver.quit()n
示例3:定位表格第二列數據內容
driver = webdriver.Chrome()ndriver.maximize_window()ndriver.get(rhttp://www.w3school.com.cn/cssref/css_selectors.asp)n# //table[@class="dataintable"]//tr[y]//td[x] y第幾條記錄,x第幾列數據n# //table[@class="dataintable"]//tr//td[2] 獲取第二列數據ntable_header = driver.find_elements_by_xpath(//table[@class="dataintable"]//tr//td[2])nfor header in table_header: # 循環獲取元素n print(header.text) # 列印文本內容ndriver.quit()n
示例4:獲取表格中所有的數據
driver = webdriver.Chrome()ndriver.maximize_window()ndriver.get(rhttp://www.w3school.com.cn/cssref/css_selectors.asp)n# //table[@class="dataintable"]//tr 定位所有行ntables = driver.find_elements_by_xpath(//table[@class="dataintable"]//tr)nfor tr in tables: # 循環每行元素n for td in tr.find_elements_by_tag_name(td): # 循環獲取列n print(td.text, end=tt)n print(n)ndriver.quit()n
定位表格,採用find_elements 組定位,使用xpath=//table//tr[y]//td[x](y第幾條記錄,x第幾列數據),當y或者x其中一個沒有值時定位一行或一列。
推薦閱讀:
※最近在找實習。面試軟體測試時,面試最想聽到的答案是什麼?
※我想學習軟體測試,可是網校不靠譜,現在想自學,求給一些指導和提示!?
※besttest安大叔的性能課程怎麼樣?
※零基礎如何通過學習進入軟體測試行業?