1. 程式人生 > >selenium-web自動化測試

selenium-web自動化測試

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(rC:\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類與輸入事件

  1. from selenium.webdriver.common.action_chains import AcitonChains
  2. ActionCharis(driver):用於生成模擬用戶行為
  3. 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自動化測試