selenium-web自動化測試
阿新 • • 發佈:2018-07-11
UNC 節點 double ext 結果 spa 元素操作 賬號 idt
1 webdriver的API與定位元素
from selenium import webdriver b = webdriver.Firefox() b.get(‘http://www.baidu.com‘) #輸入url print(b.title) #打印元素 print(b.current_url) #打印url
1.1 元素定位
元素名稱 | webdriver API | 說明 |
id | find_element_by_id() | |
name | find_element_by_name() | |
class name | find_element_by_class_name() | |
tag name | find_element_by_tag_name() | |
link text | find_element_by_link_text() | |
partial link text | find_element_by_partial_link_text() | |
xpath | find_element_by_xpath() | |
css selector | find_element_by_css_selector() |
>>> ele = b.find_element_by_id(‘kw‘) >>> ele1=b.find_element_by_name(‘wd‘)
1.2 元素操作方式
方法 | 說明 |
clear | 清除元素內容 |
send_keys | 模擬按鍵輸入 |
click | 點擊 |
submit | 提交表單 |
>>> ele.clear() >>> ele.send_keys(‘自動化測試‘) >>> b.back() #退回 >>> ele1.send_keys(‘測試‘)
>>> ele2= b.find_element_by_class_name(‘s_ipt‘) >>> ele2.send_keys(‘selenium‘) >>> ele3=b.find_element_by_tag_name(‘input‘) >>> ele3.size {‘height‘: 0.0, ‘width‘: 0.0} >>> ele3.id ‘3e2e100e-b754-4ce1-b1d7-7872079247da‘ >>> ele2.id ‘2f622532-63aa-4018-8a4c-683f382ae01a‘ #id不同,右鍵查看頁面源代碼,有其他input
>>> b.get(‘http://www.dji.com‘) >>> b.maximize_window() #最大化窗口 >>> ele=b.find_element_by_link_text(‘消費級產品‘) >>> ele.click() >>> ele1=b.find_element_by_partial_link_text(‘消費級‘) >>> ele1.click() >>> ele_css=b.find_element_by_css_selector(‘html.js.no-touch.csstransforms3d.csstransitions body.dji-zh-CN.dji-pc nav#site-header.dui-navbar.site-header.collapsed div.navbar-container div#siteHeaderNavbar ul.navbar-category li.category-item a.ga-data‘)
#審查元素後復制css路徑 >>> ele_css=b.find_element_by_css_selector(‘input[class=\‘search-input\‘]‘) #可以定位任一元素 >>> ele_css.send_keys(‘社區‘)
1.3 xpath定位
- xml路徑語言:用來確定xml文檔中某部分位置的語言;
- xpath用於在xml文檔中通過元素和屬性進行導航;
- xpath是一個W3C標準;
- 對xml/html有一定的了解。
xpah節點類型:元素、屬性、文本、命名空間、指令處理、註釋及文檔。
xpath:通過路徑表達式從xml文檔中選取節點或節點設置
表達式 | 結果 |
/xxx | 選取根節點xx |
/xxx/yyy | 根據絕對路徑選擇元素 |
//xxx | 整個文檔掃描,找到所有xxx元素 |
//xxx/yyy | 所有父元素為xxx的yyy元素 |
. | 選取當前節點的父元素節點 |
.. | 選取父元素地址 |
//xxx[@id] | 選取所有xxx元素中有id屬性的元素 |
//xxx[@id=yyy] | 選取所有xxx元素id屬性為yyy的元素 |
b.get(r‘C:\Users\zhouxy\Desktop\bookmark.html‘) ele = b.find_element_by_xpath(‘/html‘) #絕對路徑 ele.text ele = b.find_element_by_xpath(‘/html/body/form/input‘) #默認第一個輸入框 ele.get_attribute(‘type‘) #-->‘text’ #第二個輸入框 ele1=b.find_element_by_xpath(‘/html/body/from/input[2]‘) #並通過input下標找到 e= find.element_by_xpath(‘//input‘) #相對路徑 e.get_attribute(‘name‘) ele = b.find_element_by_xpath(‘//input/..‘) ele.tag_name #-->form 上一級目錄 e = b.find_element_by_xpath(‘//input[@id]‘) #‘//input[@name="xxx"]‘
#遍歷所有 ele= b.find_element_by_xpath(‘//*‘) #-->html #運用函數 ele= b.find_element_by_xpath(‘//*[count[input]=2]‘) #-->form
表達式 | 結果 |
//*[count(xxx)=2] | 統計xxx元素個數=2的節點 |
//*[local-name()=‘xxx‘] | 找到tag為xxx的元素 |
//*[starts-with(local_name(),‘x‘)] | 找到所有tag以x開頭的元素 |
//*[contain(local_name())=3] | 找到所有tag包含x的元素 |
//*[string-length(local-name())=3] | 找到所有tag長度為3的元素 |
//xxx | //yyy | 多個路徑查找 |
ele1 = b.find_element_by_xpath(‘//*[local-name()="input"]‘) #相當於(‘//input‘),默認取第一個input ele2 = b.find_element_by_xpath(‘//*[start-with(local-name(),"i")]‘) ele3 = b.find_element_by_xpath(‘//*[contain(local-name(),"i")]‘) ele4 = b.find_element_by_xpath(‘//*[contain(local-name(),"i")]‘) ele5 = b.find_element_by_xpath(‘//*[contain(local-name(),"i")][last()]‘) #包含i的tag_name倒數第一個元素 ele5 = b.find_element_by_xpath(‘//*[contain(local-name(),"i")][last()]-1‘) #包含i目錄倒數第二個元素 ele.get_attribute(‘name‘) ele6 = b.find_element_by_xpath(‘//*[string-length(local-name())=3]‘) #長度等於3的tag_name ele7=b.find_element_by_xpath(‘//title | // input[last()]‘) #-->title
2 鼠標和鍵盤事件
2.1 AcitonChains類與輸入事件
- from selenium.webdriver.common.action_chains import AcitonChains
- ActionCharis(driver):用於生成模擬用戶行為
- perform():執行存儲行為
2.2 鼠標事件
表達式 | 說明 |
context_click | 右擊事件 |
double_click | 雙擊事件 |
drag_and_drop | 拖動 |
move_to_element() | 鼠標停在一個元素上 |
click_and_hold | 按下鼠標左鍵在一個元素上 |
>>> from selenium import webdriver >>> b = webdriver.Firefox() >>> b.get(‘http://www.dji.com‘) >>> from selenium.webdriver.common.action_chains import ActionChains >>> ele=b.find_element_by_link_text(‘消費級產品‘) >>> ActionChains(b).move_to_element(ele).perform() >>> sub_ele=b.find_element_by_link_text(‘禦 Mavic Air‘) >>> sub_ele.click()
2.3 鍵盤事件:send_keys()
from selenium.webdriver.common keys import Keys
表達式 | 說明 |
send_keys(Keys.BACKSPACE) | 退格鍵 |
send_keys(Keys.CONTRL,‘a‘) | 全選 |
send_keys(Keys.CONTRL,‘v‘) | 粘貼 |
send_keys(Keys.CONTRL,‘c‘) | 復制 |
send_keys(Keys.CONTRL,‘x‘) | 剪切 |
send_keys(Keys.ENTER‘) | 回車 |
>>> s =b.find_element_by_name(‘q‘) >>> s.sent_keys(‘大疆‘) >>> s.clear() >>> s.send_keys(‘大疆啊‘) >>> from selenium.webdriver.common.keys import Keys >>> s.send_keys(Keys.BACKSPACE) >>> s.send_keys(Keys.CONTROL,‘a‘) >>> s.send_keys(Keys.CONTROL,‘x‘) >>> s.send_keys(Keys.CONTROL,‘v‘) >>> ele=b.find_element_by_link_text(‘大疆司空‘) >>> s.send_keys(Keys.ENTER)
3 對話框與多窗口管理
>>> d = webdriver.Firefox() >>> d.get(‘http://www.baidu.com‘) >>> d.find_element_by_id(‘kw‘).clear() >>> d.find_element_by_id(‘kw‘).send_keys(‘大疆科技‘) >>> d.find_element_by_id(‘su‘).click() >>> d.find_element_by_partial_link_text(‘DJI大疆創新 - 所有產品‘).click() >>> d.window_handles [‘4294967297‘, ‘4294967301‘] #列出所有的句柄 >>> d.current_window_handle ‘4294967297‘ #顯示當前句柄 >>>d.switch_to_window(d.window_handles[0]) #切換句柄 >>> d.close() #關閉tab >>> d.quit() #退出瀏覽器
4 測試腳本中的等待方法
4.1 selenium模塊中的等待方法
implicitly_wait() | 設置webdriver等待時間,等待時間後報異常 |
WebDriverWait |
等待條件滿足或者超時後退出 from selenium.webdriver.support.ui import WebDriverWait |
WebDriverWair方法:
構造函數:def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY)
poll_frequency-->check-->until-->method return Not False
-->not until-->method return False
import time from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait Url = ‘http://10.10.200.86:10004/ccs-web/index.jsp‘ Account = ‘zhouxy‘ Password = ‘111‘ def get_ele_time(driver,times,func): return WebDriverWait(driver,times).until(func) def login_test(): b = webdriver.Firefox() #啟動瀏覽器 b.get(Url) #輸入url b.maximize_window() login_ele = get_ele_time(b,10,lambda b:b.find_element_by_xpath(‘/html/body/form/ table/tbody/tr[3]/td/table/tbody/tr[3]/td/table/tbody/tr[1]/td[7]/img‘)) username_ele = b.find_element_by_id(‘j_username‘) #用戶名元素 username_ele.clear() #清空 username_ele.send_keys(Account) #輸入用戶名 password_ele = b.find_element_by_id(‘j_password‘) password_ele.clear() password_ele.send_keys(Password) login_ele.click() try : ele = b.find_element_by_link_text(‘Login fail: 錯誤的憑證‘) print(‘登錄失敗‘) except: print(‘登錄成功‘) time.sleep(10) b.close() if __name__ == ‘__main__‘: login_test()
5 alter對話框處理
Alter對象:
swich_to_alert() | 切到alter,返回一個alter對象 |
accept | 確認 |
dismiss | 取消 |
send_keys() | 有輸入框才能使用,否則報錯 |
>>>alert=b.swich_to_alert
6 測試用例設計
數據設計:字典形式
key | val |
url | 打開地址 |
text_id | 登錄元素 |
userid/pwdid/loginid | 輸入賬號元素 |
uname/pwd | 輸入賬號信息 |
errorid | 檢查錯誤條件 |
selenium-web自動化測試