2022-03-03

一饶号、什么是框架

1.框架

框架(framework)是一個(gè)框子 -- 指其約束性扭屁,也是一個(gè)架子 -- 指其支撐性葵腹,是一個(gè)基本概念上的結(jié)構(gòu)带欢,用于去解決或者處理復(fù)雜的問(wèn)題瘤缩。

框架是整個(gè)或部分系統(tǒng)的可重用設(shè)計(jì),表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實(shí)例間交互的方法;另一種定義認(rèn)為,框架是可被應(yīng)用開發(fā)者定制的應(yīng)用骨架峦剔。前者是從應(yīng)用方面而后者是從目的方面給出的定義羹幸。

框架,其實(shí)就是某種應(yīng)用的半成品,就是一組組件虫腋,供你選用完成你自己的系統(tǒng)盒蟆。簡(jiǎn)單說(shuō)就是使用別人搭好的舞臺(tái)荐捻,你來(lái)做表演鸳君。

2.為什么使用框架囱挑?

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

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

3)框架的使用能夠處理更多細(xì)節(jié)問(wèn)題膀斋。

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

3.selenium工作原理

1)運(yùn)行腳本

2)啟動(dòng)驅(qū)動(dòng)器

3)驅(qū)動(dòng)器打開瀏覽器

4)訪問(wèn)網(wǎng)頁(yè)

4.selenium環(huán)境搭建

1)python3.7

2)Firefox35(大于43)

3)selenium2框架

穩(wěn)定版本2.48.0:pip install selenium==2.48.0

4)瀏覽器驅(qū)動(dòng)

5.selenium對(duì)瀏覽器操作

1)庫(kù)的導(dǎo)入

fromseleniumimportwebdriver

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

driver = webdriver.xxx():必須大寫且加括號(hào)

使用dir(driver)查看方法

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)頁(yè)面請(qǐng)求操作

driver.get(url)# 請(qǐng)求某個(gè)url對(duì)應(yīng)的響應(yīng)

refresh()# 刷新頁(yè)面操作

back()# 回退到之前的頁(yè)面

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

6.selenium獲取斷言信息

什么是斷言

斷言是編程術(shù)語(yǔ)魁袜,表示為一些布爾表達(dá)式脆烟,程序員相信在程序中的某個(gè)特定點(diǎn)該表達(dá)式值為真驼抹,可以在任何時(shí)候啟用和禁用斷言驗(yàn)證,因此可以在測(cè)試時(shí)啟用斷言而在部署時(shí)禁用斷言拜鹤。

獲取斷言信息的操作

current_url 獲取當(dāng)前訪問(wèn)頁(yè)面url

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

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

get_screenshot_as_png() 保存圖片

get_screenshot_as_file(file) 直接保存

7.selenium八大元素

# 八大元素定位

# 第一種 id

kw=driver.find_element_by_id('kw')

kw.send_keys('坦克')

kw=driver.find_element(By.ID,'kw')

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

kw=driver.find_element_by_name('wd')

kw=driver.find_element(By.NAME,'wd')

# 第三種 class

kw=driver.find_element_by_class_name('s_ipt')

kw=driver.find_element(By.CLASS_NAME,'s_ipt')

# 第四種? Xpath

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

kw=driver.find_element(By.XPATH,".//*[@id='kw']")

# 第五種 css class

kw=driver.find_element_by_css_selector('#kw')

kw=driver.find_element(By.CSS_SELECTOR,'#kw')

# 第六種 test

kw=driver.find_element_by_link_text('新聞')

kw=driver.find_element(By.LINK_TEXT,'新聞')

# 第七種 類似于模糊查詢

kw=driver.find_element_by_partial_link_text('新')

kw=driver.find_element(By.PARTIAL_LINK_TEXT,'新')

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

kw=driver.find_element_by_tag_name('input')

8.元素的操作

對(duì)元素的相關(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()

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

1)獲取所有窗口的句柄

handles = driver.window_handlers

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

driver.switch_to_window(handles[n])→方法過(guò)時(shí)了

driver.switch_to.window(handles[n])

10.多表單切換

在網(wǎng)頁(yè)中,表單嵌套是很常見(jiàn)的情況诡右,尤其是在登錄的場(chǎng)景

1)什么是多表單

實(shí)際上就是使用iframe/frame安岂,引用了其他頁(yè)面的鏈接真正的頁(yè)面數(shù)據(jù)并沒(méi)有出現(xiàn)在當(dāng)前源代碼中。

2)處理方法

直接使用id值切換進(jìn)表單

driver.switch_to.frame(value)/driver.switch_to_frame(value)

定位到表單元素帆吻,在切換進(jìn)入

el = driver.find_element_by_xxx(value)driver.switch_to.frame(el)/driver.switch_to_frame(el)

11.彈出框操作

1)進(jìn)入到彈出框中:driver.switch_to.alert

2)接收警告:accept()

3)解散警告:dismiss()

4)發(fā)送文本到警告框:send_keys(data)用法:driver.switch_to.alert.accept()

12.下拉框

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

1)鼠標(biāo)操作

導(dǎo)入動(dòng)作鏈類域那,動(dòng)作鏈可以存儲(chǔ)鼠標(biāo)的動(dòng)作,并一起執(zhí)行

fromselenium.webdriverimportActionChains

ActionChains(driver)

鼠標(biāo)右擊

el=driver.find_element_by_xxx(value)

context_click(el)

對(duì)el執(zhí)行右擊

執(zhí)行ActionChains中存儲(chǔ)的所有操作

perform()

常用鼠標(biāo)動(dòng)作

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)懸停

2)鍵盤操作

鍵盤操作使用的是keys類猜煮,一般配合snd_keys使用

導(dǎo)入

fromselenium.webdriver.common.keysimportKeys

常用鍵盤操作

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

14.瀏覽器等待

1)為什么要進(jìn)行等待次员?

網(wǎng)速慢

網(wǎng)站內(nèi)容過(guò)多

如果不進(jìn)行等待而直接定位元素,可能會(huì)拋出異常

2)selenium中等待的分類

顯示等待

顯示等待是根據(jù)條件進(jìn)行等待王带,等待條件出現(xiàn)

fromselenium.webdriver.common.byimportBy

fromselenium.webdriver.support.uiimportWebDriverWait

fromselenium.webdriver.supportimportexpected_conditionsasEC

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

隱示等待

隱示等待是根據(jù)事件進(jìn)行等待淑蔚,等待特定事件

driver.implicitly_wait(n)

15.IDE功能介紹

文件:創(chuàng)建、打開和保存測(cè)試案例和測(cè)試案例集愕撰。編輯:復(fù)制刹衫、粘貼、刪除搞挣、撤銷和選擇測(cè)試案例中的所有命令带迟。Options : 用于設(shè)置seleniunm IDE。

用來(lái)填寫被測(cè)網(wǎng)站的地址囱桨。

速度控制:控制案例的運(yùn)行速度仓犬。

運(yùn)行所有:運(yùn)行一個(gè)測(cè)試案例集中的所有案例。

運(yùn)行:運(yùn)行當(dāng)前選定的測(cè)試案例舍肠。

暫停/恢復(fù):暫停和恢復(fù)測(cè)試案例執(zhí)行婶肩。

單步:可以運(yùn)行一個(gè)案例中的一行命令。

錄制:點(diǎn)擊之后貌夕,開始記錄你對(duì)瀏覽器的操作律歼。

案例集列表。

測(cè)試腳本啡专;table標(biāo)簽:用表格形式展現(xiàn)命令及參數(shù)险毁。source標(biāo)簽:用原始方式展現(xiàn),默認(rèn)是HTML語(yǔ)言格式们童,也可以用其他語(yǔ)言展示畔况。

查看腳本運(yùn)行通過(guò)/失敗的個(gè)數(shù)。

當(dāng)選中前命令對(duì)應(yīng)參數(shù)慧库。

日志/參考/UI元素/Rollup

16.代碼案例

fromseleniumimportwebdriver

fromselenium.webdriver.common.byimportBy

fromselenium.webdriver.common.keysimportKeys

fromselenium.webdriver.support.uiimportSelect

fromselenium.common.exceptionsimportNoSuchElementException

fromselenium.common.exceptionsimportNoAlertPresentException

importunittest,time,re

classQq(unittest.TestCase):

defsetUp(self):

self.driver=webdriver.Firefox()

self.driver.implicitly_wait(30)

self.base_url="https://qzone.qq.com/"

self.verificationErrors= []

self.accept_next_alert=True


deftest_qq(self):

driver=self.driver

driver.get(self.base_url+"/")

# 定位

driver.switch_to.frame(driver.find_element_by_id("login_frame"))

driver.find_element_by_id("switcher_plogin").click()

# driver.find_element_by_id("uin_del").click()

driver.find_element_by_id("u").clear()

driver.find_element_by_id("u").send_keys("3084761668")

driver.find_element_by_id("p").clear()

driver.find_element_by_id("p").send_keys("dafei123457")

driver.find_element_by_id("login_button").click()

# ERROR: Caught exception [ERROR: Unsupported command [selectWindow | null | ]]

# driver.find_element_by_id("tcaptcha_drag_thumb").click()

# self.assertEqual(driver.title,"QQ空間")

self.assertIn("QQ11空間",driver.title)

defis_element_present(self,how,what):

try:self.driver.find_element(by=how,value=what)

exceptNoSuchElementExceptionase:returnFalse

returnTrue


defis_alert_present(self):

try:self.driver.switch_to_alert()

exceptNoAlertPresentExceptionase:returnFalse

returnTrue


defclose_alert_and_get_its_text(self):

try:

alert=self.driver.switch_to_alert()

alert_text=alert.text

ifself.accept_next_alert:

alert.accept()

else:

alert.dismiss()

returnalert_text

finally:self.accept_next_alert=True


deftearDown(self):

self.driver.quit()

self.assertEqual([],self.verificationErrors)

if__name__=="__main__":

unittest.main()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末跷跪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子齐板,更是在濱河造成了極大的恐慌吵瞻,老刑警劉巖葛菇,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異橡羞,居然都是意外死亡眯停,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門卿泽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)莺债,“玉大人,你說(shuō)我怎么就攤上這事签夭∑氚睿” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵第租,是天一觀的道長(zhǎng)措拇。 經(jīng)常有香客問(wèn)我,道長(zhǎng)煌妈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任宣羊,我火速辦了婚禮璧诵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘仇冯。我一直安慰自己之宿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布苛坚。 她就那樣靜靜地躺著比被,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泼舱。 梳的紋絲不亂的頭發(fā)上等缀,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音娇昙,去河邊找鬼尺迂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛冒掌,可吹牛的內(nèi)容都是我干的噪裕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼股毫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼膳音!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起铃诬,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤祭陷,失蹤者是張志新(化名)和其女友劉穎苍凛,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颗胡,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毫深,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了毒姨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哑蔫。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖弧呐,靈堂內(nèi)的尸體忽然破棺而出闸迷,到底是詐尸還是另有隱情,我是刑警寧澤俘枫,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布腥沽,位于F島的核電站,受9級(jí)特大地震影響鸠蚪,放射性物質(zhì)發(fā)生泄漏今阳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一茅信、第九天 我趴在偏房一處隱蔽的房頂上張望盾舌。 院中可真熱鬧,春花似錦蘸鲸、人聲如沸妖谴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)膝舅。三九已至,卻和暖如春窑多,著一層夾襖步出監(jiān)牢的瞬間仍稀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工埂息, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留琳轿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓耿芹,卻偏偏與公主長(zhǎng)得像崭篡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吧秕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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

  • 參考鏈接: web自動(dòng)化測(cè)試教案:http://www.cnblogs.com/zidonghua/p/74300...
    永杰gg閱讀 1,051評(píng)論 0 0
  • 自動(dòng)化 一琉闪、概念 互聯(lián)網(wǎng)軟件的開發(fā)和發(fā)布,已經(jīng)形成了一套標(biāo)準(zhǔn)流程砸彬,最重要的組成部分就是持續(xù)集成(Continuou...
    G_eebd閱讀 329評(píng)論 0 0
  • 一颠毙、概念 互聯(lián)網(wǎng)軟件的開發(fā)和發(fā)布斯入,已經(jīng)形成了一套標(biāo)準(zhǔn)流程,最重要的組成部分就是持續(xù)集成(Continuous in...
    __65a0閱讀 792評(píng)論 0 4
  • 完善融寶UI自動(dòng)化框架 繼續(xù)總結(jié)自動(dòng)化測(cè)試API "29.模擬鍵盤單個(gè)按鍵/組合按鍵操作蛀蜜," # import t...
    公子小白123閱讀 1,050評(píng)論 0 1
  • 1. 什么是框架 框架(framework)是一個(gè)框子 -- 指其約束性刻两,也是一個(gè)架子 -- 指其支撐性,是一個(gè)基...
    在摘棉花閱讀 185評(píng)論 0 0