Web自動化測試進(jìn)階

1. 什么是框架

框架(framework)是一個框子 -- 指其約束性不脯,也是一個架子 -- 指其支撐性悲幅,是一個基本概念上的結(jié)構(gòu)躏嚎,用于去解決或者處理復(fù)雜的問題慨丐。

2. 為什么使用框架

1)自己從頭實(shí)現(xiàn)太復(fù)雜

2)使用框架能夠更專注于業(yè)務(wù)邏輯祟身,加快開發(fā)速度

3)框架的使用能夠處理更多細(xì)節(jié)問題

4)使用人數(shù)多奥务,穩(wěn)定性,擴(kuò)展性好

3. selenium工作原理

4.selenium對瀏覽器操作

1)庫的導(dǎo)入

from selenium import webdriver

2)創(chuàng)建瀏覽器對象

# 必須為大寫

driver = webdriver.Firefox()

driver = webdriver.Chrome()

3)瀏覽器尺寸相關(guān)操作

maximize_window() 最大化

get_window_size()? ? 獲取瀏覽器尺寸袜硫,打印查看

set_window_size()? ? 設(shè)置瀏覽器尺寸氯葬,400*400

4)瀏覽器位置相關(guān)操作

get_window_position() 獲取瀏覽器位置

set_window_position(x,y)? ? 設(shè)置瀏覽器位置

5)瀏覽器的關(guān)閉操作

close()關(guān)閉當(dāng)前標(biāo)簽/窗口

quit()關(guān)閉所有標(biāo)簽/窗口

6)頁面請求操作

driver.get(url)請求某個url對應(yīng)的響應(yīng)

refresh()刷新頁面操作

back()回退到之前的頁面

forward()前進(jìn)到之后的頁面

fromselenium import webdriver

import time

# driver = webdriver.Chrome()#不可以找到,必須導(dǎo)入對應(yīng)的驅(qū)動器

driver=webdriver.Firefox()

url1="http://www.baidu.com"

url2="https://zhuanlan.zhihu.com/"

# 請求第一個接口

driver.get(url1)

time.sleep(3)

# 刷新

driver.refresh()

driver.get(url2)

# 回退

driver.back()time.sleep(3)

# 前進(jìn)driver.forward()

time.sleep(3)

driver.close()

5.selenium獲取斷言信息

1)什么是斷言

斷言是編程術(shù)語婉陷,表示為一些布爾表達(dá)式溢谤,程序員相信在程序中的某個特定點(diǎn)該表達(dá)式值為真瞻凤,可以在任何時候啟用和禁用斷言驗(yàn)證,因此可以在測試時啟用斷言而在部署時禁用斷言世杀。

2)獲取斷言信息的操作

current_url 獲取當(dāng)前訪問頁面url

title 獲取當(dāng)前瀏覽器標(biāo)題

page_source 獲取網(wǎng)頁源碼

print(driver.current_url)

print(driver.title)

print(driver.page_source)

get_screenshot_as_png() 保存圖片

data=driver.get_screenshot_as_png()

withopen("a.png","wb")asf:

f.write(data)

get_screenshot_as_file(file) 直接保存

driver.get_screenshot_as_file("b.png")

6.selenium八大元素定位

from selenium import webdriver

driver=webdriver.Firefox()

# url = "http://www.baidu.com"

# driver.get(url)

# 第一種 id

# ele = driver.find_element_by_id("kw")

# ele.send_keys(12306) # 輸入數(shù)據(jù)

# from selenium.webdriver.common.by import By

# ele = driver.find_element(By.ID,"kw")# ele.send_keys(12306) # 輸入數(shù)據(jù)

# 第二種? 標(biāo)簽名字

# ele = driver.find_element_by_name("wd")

# ele.send_keys(12306) # 輸入數(shù)據(jù)

# 第三種? class

# ele = driver.find_element_by_class_name("s_ipt"

)

# ele.send_keys(12306) # 輸入數(shù)據(jù)

# 第四種? Xpath

# ele = driver.find_element_by_xpath("http://*[@id='kw']")

# ele.send_keys(12306) # 輸入數(shù)據(jù)

# 第五種? css class

# ele = driver.find_element_by_css_selector("#kw")

# ele.send_keys(12306) # 輸入數(shù)據(jù)

# 第六種? text

# ele = driver.find_element_by_link_text("地圖")

# ele.click() # 輸入數(shù)據(jù)

# 第七種:類似于模糊匹配

# ele = driver.find_element_by_partial_link_text("地")

# ele.click()

# 第八種:標(biāo)簽名定位阀参,必須得保證只有一個這種名字的標(biāo)簽,使用下面這個搜索

# url = "http://cn.bing.com/"

# driver.get(url)# ele = driver.find_element_by_tag_name("input")

# ele.send_keys(12306) # 輸入數(shù)據(jù)

7.元素的操作

對元素的相關(guān)操作瞻坝,一般要先獲取到元素蛛壳,再調(diào)用相關(guān)方法

element = driver.find_element_by_xxx(value)

1)點(diǎn)擊和輸入

點(diǎn)擊操作---------->element.click()

清空/輸入操作:

element.clear()---------------------->清空輸入框

element.send_keys(data)-------->輸入數(shù)據(jù)

2)提交操作

element.submit()

8.多標(biāo)簽之間的切換

場景:有的時候點(diǎn)擊一個鏈接,新頁面并非由當(dāng)前頁面跳轉(zhuǎn)過去所刀,而是新開一個頁面打開衙荐,這種情況下,計(jì)算機(jī)需要識別多標(biāo)簽或窗口的情況浮创。

1)獲取所有窗口的句柄

handles = driver.window_handlers

調(diào)用該方法會得到一個列表忧吟,在selenium運(yùn)行過程中的每一個窗口都有一個對應(yīng)的值存放在里面。

2)通過窗口的句柄進(jìn)入的窗口

driver.switch_to_window(handles[n])

driver.switch_to.window(handles[n])

通過窗口句柄激活進(jìn)入某一窗口

案例:58同城租房信息:http://bj.58.com

# 使用句柄driver.get("http://bj.58.com")

print("點(diǎn)擊之前句柄:",driver.window_handles)

ele=driver.find_element_by_xpath(".//*[@id='fcNav']/em/a[1]")ele.click()

list_windowns=driver.window_handles

print("點(diǎn)擊之后句柄:",driver.window_handles)

driver.switch_to.window(list_windowns[1])

eleDaxing=driver.find_element_by_link_text("大興")

eleDaxing.click()

9.多表單

? ? el = driver.find_element_by_xxx(value)

? ? driver.switch_to.frame(el)/driver.switch_to_frame(el)

案例:

fromseleniumimportwebdriver

#打開游覽器

driver=webdriver.Firefox()

#登錄QQ

url="https://qzone.qq.com/"

driver.get(url)

#獲取元素

#定位表單元素

ele_bd=driver.find_element_by_id("login_frame")

driver.switch_to.frame(ele_bd)

ele=driver.find_element_by_xpath(".//*[@id='switcher_plogin']")

ele.click()

#輸入賬號

ele2=driver.find_element_by_id("u")

ele2.send_keys()

#輸入密碼

ele3=driver.find_element_by_id("p")

ele3.send_keys("")

ele4=driver.find_element_by_id("login_button")

ele4.click()

彈出框操作

# 進(jìn)入到彈出框中

driver.switch_to.alert

#接收警告

accept()

#解散警告

dismiss()

#發(fā)送文本到警告框

send_keys(data)

用法:driver.switch_to.alert.accept()

下拉框

案例:

fromseleniumimportwebdriver

importtime

driver=webdriver.Firefox()

driver.get("http://www.baidu.com")

ele=driver.find_element_by_id("s-usersetting-top")

ele.click()

ele1=driver.find_element_by_xpath(".//*[@id='s-user-setting-menu']/div/a[2]")

ele1.click()

time.sleep(2)

ele2=driver.find_element_by_xpath(".//*[@id='yadv-setting-gpc']/div/div[1]/i[1]")

ele2.click()

list_ele=driver.find_elements_by_class_name("c-select-item")

print(list_ele)

list_ele[2].click()

# for list_i in list_ele:

# ? ? print(list_i.text)

# ? ? if list_i.text =="最近一周":

# ? ? ? ? list_i.click()

鼠標(biāo)和鍵盤操作

鼠標(biāo)

1.先導(dǎo)入動作鏈類:

fromselenium.webdriverimportActionChains

ActionChains(driver)

2.常用鼠標(biāo)動作:

ActionChains(driver).context_click(ele).perform()點(diǎn)擊鼠標(biāo)右鍵

ActionChains(driver).double_click(ele).perform()點(diǎn)擊鼠標(biāo)左鍵

ActionChains(driver).move_to_element(el).perform()鼠標(biāo)懸停

3.perform()對前面的方法執(zhí)行

#案例:

fromselenium.webdriverimportActionChains

fromseleniumimportwebdriver

importtime

driver=webdriver.Firefox()

driver.get("http://www.baidu.com")

ele=driver.find_element_by_xpath(".//*[@id='s-top-left']/div/a")

# ele.click()

ActionChains(driver).double_click(ele).perform()

鍵盤

1.導(dǎo)入

fromselenium.webdriver.common.keysimportKeys

2.常用鍵盤操作

send_keys(Keys.BACK_SPACE) ?? 刪除鍵(BackSpace)

send_keys(Keys.SPACE) ? ? ? ? 空格鍵(Space)

send_keys(Keys.TAB) ? ? ? ? ? 制表鍵(Tab)

send_keys(Keys.ESCAPE) ? ? ?? 回退鍵(Esc)

send_keys(Keys.ENTER) ? ? ? ? 回車鍵(Enter)

send_keys(Keys.CONTROL,‘a(chǎn)’) ? 全選(Ctrl+A)

send_keys(Keys.CONTROL,‘a(chǎn)’) ? 全選(Ctrl+A)

send_keys(Keys.CONTROL,‘x’) ? 剪切(Ctrl+X)

send_keys(Keys.CONTROL,‘v’) ? 粘貼(Ctrl+V)

send_keys(Keys.F1) ? ? ? ? ?? 鍵盤F1

send_keys(Keys.F12) ? ? ? ? ? 鍵盤F12

瀏覽器等待

1.為什么要進(jìn)行等待

1.網(wǎng)速慢 2.網(wǎng)站內(nèi)容過多 3.如果不進(jìn)行等待而直接定位元素斩披,可能會拋出異常

2.selenium中等待的分類

1.固定等待

2.顯示等待

WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located(

(By.CLASS_NAME,"g-hu")))

3.隱式等待?

driver.implicitly_wait(n)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末溜族,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子垦沉,更是在濱河造成了極大的恐慌煌抒,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厕倍,死亡現(xiàn)場離奇詭異寡壮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)讹弯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門况既,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人组民,你說我怎么就攤上這事坏挠。” “怎么了邪乍?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵降狠,是天一觀的道長。 經(jīng)常有香客問我庇楞,道長榜配,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任吕晌,我火速辦了婚禮蛋褥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘睛驳。我一直安慰自己烙心,他們只是感情好膜廊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著淫茵,像睡著了一般爪瓜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上匙瘪,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天铆铆,我揣著相機(jī)與錄音,去河邊找鬼丹喻。 笑死薄货,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的碍论。 我是一名探鬼主播谅猾,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鳍悠!你這毒婦竟也來了税娜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤贼涩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后薯蝎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體遥倦,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年占锯,在試婚紗的時候發(fā)現(xiàn)自己被綠了袒哥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡消略,死狀恐怖堡称,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情艺演,我是刑警寧澤却紧,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站胎撤,受9級特大地震影響晓殊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伤提,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一巫俺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肿男,春花似錦介汹、人聲如沸却嗡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窗价。三九已至,卻和暖如春赶撰,著一層夾襖步出監(jiān)牢的瞬間舌镶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工豪娜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留餐胀,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓瘤载,卻偏偏與公主長得像否灾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鸣奔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容