版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單元5自動(dòng)化測(cè)試目錄自動(dòng)化測(cè)試基礎(chǔ)任務(wù)一SeleniumWebDriver的基本應(yīng)用任務(wù)二SeleniumWebDriver的高級(jí)應(yīng)用任務(wù)三任務(wù)一自動(dòng)化測(cè)試基礎(chǔ)活動(dòng)一認(rèn)識(shí)自動(dòng)化測(cè)試
自動(dòng)化測(cè)試是把以人為驅(qū)動(dòng)的測(cè)試行為轉(zhuǎn)化為機(jī)器執(zhí)行的一種過(guò)程,即模擬手工測(cè)試步驟通過(guò)執(zhí)行程序語(yǔ)言編制的測(cè)試腳本自動(dòng)地測(cè)試軟件。
自動(dòng)化測(cè)試可以把我們需要花費(fèi)大量時(shí)間去重復(fù)執(zhí)行的測(cè)試操作用腳本實(shí)現(xiàn),把測(cè)試人員從枯燥單調(diào)的重復(fù)性勞動(dòng)中解放出來(lái),進(jìn)而節(jié)省人力、時(shí)間和資源,提高測(cè)試效率。一般滿足以下三個(gè)條件就可以對(duì)項(xiàng)目實(shí)施自動(dòng)化測(cè)試:項(xiàng)目需求變動(dòng)不頻繁項(xiàng)目周期較長(zhǎng)自動(dòng)化測(cè)試腳本可重復(fù)使用活動(dòng)一認(rèn)識(shí)自動(dòng)化測(cè)試常見(jiàn)的自動(dòng)化測(cè)試工具LoadRunner適用于性能測(cè)試,通過(guò)模擬大量用戶實(shí)施并發(fā)負(fù)載及實(shí)時(shí)性能監(jiān)測(cè)的方式來(lái)確認(rèn)和查找問(wèn)題。LoadRunner可適用于各種體系架構(gòu)的自動(dòng)負(fù)載測(cè)試,能預(yù)測(cè)系統(tǒng)行為并評(píng)估系統(tǒng)性能。QuickTestProfessional適用于Web自動(dòng)化測(cè)試,提供符合所有主要應(yīng)用軟件環(huán)境的功能測(cè)試和回歸測(cè)試的自動(dòng)化。采用關(guān)鍵字驅(qū)動(dòng)的理念以簡(jiǎn)化測(cè)試用例的創(chuàng)建和維護(hù)。它讓用戶可以直接錄制屏幕上的操作流程,自動(dòng)生成功能測(cè)試或者回歸測(cè)試用例。Postman適用于接口測(cè)試,提供功能強(qiáng)大的WebAPI和HTTP請(qǐng)求的調(diào)試,它能夠發(fā)送任何類型的HTTP請(qǐng)求,并且能附帶任何數(shù)量的參數(shù)和Headers,還提供測(cè)試數(shù)據(jù)和環(huán)境配置數(shù)據(jù)的導(dǎo)入導(dǎo)出。JMeter適用于接口測(cè)試,性能測(cè)試,100%的用java實(shí)現(xiàn)。用于模擬在服務(wù)器、網(wǎng)絡(luò)或者其他對(duì)象上附加高負(fù)載以測(cè)試他們提供服務(wù)的受壓能力,或者分析他們提供的服務(wù)在不同負(fù)載條件下的總性能情況。Selenium適用于Web自動(dòng)化測(cè)試,利用Selenium編寫(xiě)的自動(dòng)化測(cè)試腳本可以模擬用戶在瀏覽器中的各種操作,支持的瀏覽器包括IE、Firefox、Chrome等,還支持多平臺(tái)和多語(yǔ)言。Appium適用于App自動(dòng)化測(cè)試,支持iOS和Android平臺(tái),支持Python、Java等語(yǔ)言。當(dāng)收到客戶端的連接后,就會(huì)監(jiān)聽(tīng)到命令,然后在移動(dòng)設(shè)備上執(zhí)行這些命令,最后將執(zhí)行結(jié)果放在HTTP響應(yīng)中返還給客戶端。AppiumSeleniumJMeterPostmanQTPLoadRunner活動(dòng)一認(rèn)識(shí)自動(dòng)化測(cè)試自動(dòng)化測(cè)試的流程活動(dòng)一認(rèn)識(shí)自動(dòng)化測(cè)試活動(dòng)二搭建自動(dòng)化測(cè)試環(huán)境四款軟件:PythonPython語(yǔ)言開(kāi)發(fā)環(huán)境基于Web的自動(dòng)化測(cè)試工具SeleniumPyCharmPythonIDE谷歌瀏覽器Chrome一、安裝Python開(kāi)發(fā)環(huán)境
從Python官網(wǎng)下載安裝程序,雙擊Python,根據(jù)提示一步步操作。1、雙擊安裝文件(如python-3.11.5-amd64.exe)進(jìn)行安裝,如下圖所示。按照圈中區(qū)域進(jìn)行設(shè)置,切記要勾選打鉤的框,如果不進(jìn)行勾選,需要自己配置環(huán)境變量,勾選后會(huì)自動(dòng)配置環(huán)境變量。然后再點(diǎn)擊“Customizeinstallation(自定義安裝)”進(jìn)入到下一步?;顒?dòng)二搭建自動(dòng)化測(cè)試環(huán)境2、點(diǎn)擊自定義安裝后彈出如下圖所示的安裝界面,將所有的復(fù)選框進(jìn)行勾選,點(diǎn)擊Next。活動(dòng)二搭建自動(dòng)化測(cè)試環(huán)境3、彈出新的安裝界面,如下圖所示。
界面中只勾選圖中選中的復(fù)選框即可。然后選擇安裝路徑。我們可以通過(guò)點(diǎn)擊Browse按鈕自行選擇安裝路徑,也可以直接點(diǎn)擊Install在默認(rèn)路徑進(jìn)行安裝,點(diǎn)擊Install后等待安裝完成?;顒?dòng)二搭建自動(dòng)化測(cè)試環(huán)境4、安裝完成后為了檢查我們的Python是否安裝成功,可以使用win+R打開(kāi)cmd命令窗口,在窗口中輸入python命令進(jìn)行查詢,出現(xiàn)如下圖所示的提示信息則表示成功了。活動(dòng)二搭建自動(dòng)化測(cè)試環(huán)境二、安裝Selenium打開(kāi)cmd命令窗口在線安裝Selenium。命令:pipinstallselenium說(shuō)明:通過(guò)“pipinstallselenium”命令安裝Selenium時(shí),系統(tǒng)將默認(rèn)安裝當(dāng)前最新的版本。如果想要安裝指定的Selenium版本,可以使用“pipinstallselenium==版本號(hào)”命令?;顒?dòng)二搭建自動(dòng)化測(cè)試環(huán)境安裝完成后可以用
pipshowselenium命令檢查是否安裝成功。如下圖所示。活動(dòng)二搭建自動(dòng)化測(cè)試環(huán)境三、安裝PyCharm
PyCharm安裝包需要從網(wǎng)上自行下載。安裝步驟如下:1、雙擊PyCharm安裝包,彈出如下圖所示對(duì)話框,之后點(diǎn)擊Next?;顒?dòng)二搭建自動(dòng)化測(cè)試環(huán)境2、選擇安裝路徑(也可以使用默認(rèn)路徑),選擇完成后,點(diǎn)擊Next,如下圖所示?;顒?dòng)二搭建自動(dòng)化測(cè)試環(huán)境3、選擇相對(duì)應(yīng)的系統(tǒng)和文件后綴名,之后點(diǎn)擊Next,如圖所示。活動(dòng)二搭建自動(dòng)化測(cè)試環(huán)境4、在開(kāi)始安裝界面點(diǎn)擊Install,進(jìn)行安裝,如圖所示?;顒?dòng)二搭建自動(dòng)化測(cè)試環(huán)境5、安裝成功之后勾選復(fù)選框,點(diǎn)擊Finish,表示安裝完成并運(yùn)行PyCharm。如圖所示?;顒?dòng)二搭建自動(dòng)化測(cè)試環(huán)境四、安裝Chrome瀏覽器以及驅(qū)動(dòng)1、安裝Chrome瀏覽器
訪問(wèn)GoogleChrome官方網(wǎng)站下載Chrome瀏覽器安裝程序,下載地址:/chrome/,然后根據(jù)提示一步步完成安裝。2、安裝Chrome瀏覽器驅(qū)動(dòng)
要想通過(guò)自動(dòng)化腳本打開(kāi)瀏覽器,還需要安裝瀏覽器驅(qū)動(dòng)。除了Firefox瀏覽器的驅(qū)動(dòng)已經(jīng)默認(rèn)包含在SeleniumWedDriver包里了,可以直接調(diào)用。如果要使用其他瀏覽器,比如IE瀏覽器或者谷歌瀏覽器,都需要安裝相應(yīng)的瀏覽器驅(qū)動(dòng)?;顒?dòng)二搭建自動(dòng)化測(cè)試環(huán)境
注意下載與谷歌瀏覽器版本對(duì)應(yīng)的驅(qū)動(dòng)。然后將谷歌瀏覽器驅(qū)動(dòng)文件chromedriver.exe放置在python安裝文件的根目錄“...\Python\Python35”下,如下圖所示。活動(dòng)二搭建自動(dòng)化測(cè)試環(huán)境任務(wù)二SeleniumWebDriver的基本應(yīng)用一、引入webdriver模塊
要在Pycharm中使用WebDriver編寫(xiě)自動(dòng)化測(cè)試腳本,首先需要引入WebDriver模塊。代碼如下:
fromseleniumimportwebdriver活動(dòng)一熟悉WebDriver基礎(chǔ)二、瀏覽器的打開(kāi)、關(guān)閉方法說(shuō)明webdriver.瀏覽器名稱()打開(kāi)測(cè)試使用的瀏覽器get(url)打開(kāi)頁(yè)面quit()退出當(dāng)前瀏覽器close()關(guān)閉瀏覽器的當(dāng)前窗口表5-5打開(kāi)、關(guān)閉瀏覽器的方法活動(dòng)一熟悉WebDriver基礎(chǔ)示例:調(diào)用谷歌瀏覽器訪問(wèn)百度首頁(yè),然后關(guān)閉窗口。fromseleniumimportwebdriver
#打開(kāi)Chrome瀏覽器使用Chrome()方法driver=webdriver.Chrome()
driver.get("")
driver.close()活動(dòng)一熟悉WebDriver基礎(chǔ)三、瀏覽器的前進(jìn)、后退和刷新表5-6瀏覽器的前進(jìn)、后退和刷新方法方法說(shuō)明forward()瀏覽器前進(jìn)back()瀏覽器后退refresh()瀏覽器刷新活動(dòng)一熟悉WebDriver基礎(chǔ)示例:實(shí)現(xiàn)百度首頁(yè)和百度新聞頁(yè)面之間的切換。fromseleniumimportwebdriver
driver=webdriver.Chrome()
driver.get("")
driver.get("")
driver.back()#后退到“百度首頁(yè)”
driver.forward()#前進(jìn)到“百度新聞頁(yè)面”driver.refresh()#刷新頁(yè)面活動(dòng)一熟悉WebDriver基礎(chǔ)四、瀏覽器窗口的設(shè)置表5-7設(shè)置瀏覽器窗口的大小和位置的方法方法說(shuō)明maximize_window()將瀏覽器窗口最大化minimize_window()將瀏覽器窗口最小化set_window_position(x,y)將瀏覽器窗口移動(dòng)到指定位置set_window_size(width,height)將瀏覽器窗口設(shè)置為指定大小set_window_rect(x,y,width,height)將瀏覽器窗口移動(dòng)到指定位置并設(shè)置為指定大小活動(dòng)一熟悉WebDriver基礎(chǔ)示例:設(shè)置瀏覽器窗口的大小和位置。fromseleniumimportwebdriver
driver=webdriver.Chrome()
driver.get("")#將瀏覽器窗口最小化driver.minimize_window()#將瀏覽器窗口最大化driver.maximize_window()#設(shè)置瀏覽器窗口大小為寬500像素、高600像素driver.set_window_size(500,600)#將瀏覽器窗口移動(dòng)到橫坐標(biāo)200像素、縱坐標(biāo)100像素的位置driver.set_window_position(200,100)#將瀏覽器窗口移動(dòng)到橫坐標(biāo)200像素、縱坐標(biāo)200像素的位置并設(shè)置窗口大小為寬400像素、高400像素driver.set_window_rect(200,200,400,400)活動(dòng)一熟悉WebDriver基礎(chǔ)自動(dòng)化要做的就是模擬鼠標(biāo)和鍵盤(pán)來(lái)操作頁(yè)面上的元素,或單擊,或輸入,或鼠標(biāo)懸停等。
操作這些元素的前提是需要找到它們,自動(dòng)化工具無(wú)法像測(cè)試人員一樣可以通過(guò)肉眼來(lái)分辨頁(yè)面上的元素,并且知道它們是做什么用的,那么如何找到它們呢?活動(dòng)二定位元素通過(guò)前端工具,可以看到頁(yè)面上的元素都是由一行行的代碼組成的,它們之間有層級(jí)地組織起來(lái),每個(gè)元素有不同的標(biāo)簽名和屬性值。WebDriver就是通過(guò)這些信息來(lái)找到不同的元素的。活動(dòng)二定位元素一、單個(gè)元素的定位
WebDriver提供了八種對(duì)單個(gè)元素進(jìn)行定位的方法,在Python語(yǔ)言中,所對(duì)應(yīng)的方法如下:find_element_by_id()find_element_by_name()find_element_by_class_name()find_element_by_tag_name()find_element_by_link_text()find_element_by_partial_link_text()find_element_by_xpath()find_element_by_css_selector()活動(dòng)二定位元素格式:find_element_by_id()1、id定位id定位是通過(guò)元素的id屬性值來(lái)定位元素。由于在頁(yè)面中id屬性值一般不會(huì)重復(fù),所以如果元素有id屬性,可以優(yōu)先考慮使用id定位方法定位元素。
以百度頁(yè)面的輸入框?yàn)槔?。先打開(kāi)百度頁(yè)面,右擊輸入框,在彈出菜單中選“檢查”,出現(xiàn)的界面如右圖所示。定位輸入框的腳本:find_element_by_id(“kw”)活動(dòng)二定位元素格式:find_element_by_name()2、name定位在編寫(xiě)自動(dòng)化腳本的時(shí)候,如果頁(yè)面中某個(gè)元素沒(méi)有id屬性,那我們就沒(méi)有辦法通過(guò)id屬性去定位頁(yè)面元素,但是如果這個(gè)元素的name屬性值是獨(dú)一無(wú)二的,我們就可以使用name屬性來(lái)定位。
以百度頁(yè)面的輸入框?yàn)槔?,如右圖所示。定位輸入框的腳本:find_element_by_name(“wd”)活動(dòng)二定位元素格式:find_element_by_class_name()3、class_name定位
如果某個(gè)頁(yè)面元素,既沒(méi)有id屬性,也沒(méi)有name屬性,但是我們可以在定位的頁(yè)面中找到class屬性,那么我們就可以使用class屬性來(lái)定位。
以百度頁(yè)面的輸入框?yàn)槔?,如右圖所示。定位輸入框的腳本:find_element_by_class_name(“s_ipt”)活動(dòng)二定位元素格式:
find_element_by_tag_name()4、tag_name定位
HTML的本質(zhì)就是通過(guò)tag來(lái)定義實(shí)現(xiàn)不同的功能,每一個(gè)元素本質(zhì)上也是一個(gè)tag。因?yàn)橐粋€(gè)tag往往用來(lái)定義一類功能,所以通過(guò)tag識(shí)別某個(gè)元素的概率很低。打開(kāi)任意一個(gè)頁(yè)面,都會(huì)發(fā)現(xiàn)存在大量的<div>、<input>、<a>等tag。所以很難通過(guò)tagname去區(qū)分不同的元素。以百度頁(yè)面為例,如右圖所示。腳本find_element_by_tag_name(“input”)不能定位到文本框。活動(dòng)二定位元素格式:
find_element_by_link_text()5、link_text定位link_text定位專門(mén)用來(lái)定位文本鏈接,使用超鏈接的文本做參數(shù)來(lái)進(jìn)行定位。
右擊百度頁(yè)面左上角的“地圖”,選“檢查”,如右圖所示。通過(guò)元素屬性可以看出,標(biāo)簽名為a,且href
=“http://map.baidu.com”,說(shuō)明它是個(gè)超鏈接,對(duì)于這種元素,可以用link定位。定位“地圖”鏈接的腳本:find_element_by_link_text(“地圖”)活動(dòng)二定位元素格式:find_element_by_partial_link_text()6、partial_link_text定位link_text定位方法是使用超鏈接文本的全部字符串進(jìn)行定位。有時(shí)候一個(gè)超鏈接文本的字符串可能比較長(zhǎng),如果輸入全稱的話,會(huì)顯示很長(zhǎng),既占地方而且也易出錯(cuò),這時(shí)候可以用partial_link_text定位。這是一種模糊匹配方式,只要截取超鏈接文本中一部分字符串就可以。
如右圖所示的新浪網(wǎng)站。定位“跟著習(xí)近平學(xué)黨史—增強(qiáng)理論自信”鏈接的腳本:find_element_by_partial_link_text(“學(xué)黨史”)活動(dòng)二定位元素格式:find_element_by_xpath()7、XPath定位
XPath即為XML路徑語(yǔ)言,是一種用來(lái)確定XML文檔中某部分位置的語(yǔ)言。XPath基于XML的樹(shù)狀結(jié)構(gòu),提供在數(shù)據(jù)結(jié)構(gòu)樹(shù)中找尋節(jié)點(diǎn)的能力。因?yàn)镠TML可以看做XML的一種實(shí)現(xiàn),所以selenium用戶可以使用這種強(qiáng)大的語(yǔ)言在web應(yīng)用中定位元素。
如果熟悉XPath語(yǔ)法可手工編寫(xiě)XPath路徑。更簡(jiǎn)單的做法是直接從網(wǎng)站頁(yè)面復(fù)制XPath路徑。以百度網(wǎng)站為例,如右圖所示。XPath定位輸入框的腳本:find_element_by_xpath(‘//*[@id="kw"]’)活動(dòng)二定位元素格式:find_element_by_css_selector()8、css_selector定位
css_selector定位是另外一種通過(guò)路徑導(dǎo)航實(shí)現(xiàn)某個(gè)元素的定位方法,但是此方法比XPath更為簡(jiǎn)潔,運(yùn)行速度更快。我們可以通過(guò)定位到某個(gè)頁(yè)面元素后,直接右擊選擇“Copy–Copyselector”復(fù)制出CSS路徑,然后放到css_selector定位方法中做參數(shù)進(jìn)行元素定位。以百度網(wǎng)站為例,如右圖所示。CSS定位輸入框的腳本:find_element_by_css_selector(“#kw”)活動(dòng)二定位元素
當(dāng)測(cè)試頁(yè)面上有多個(gè)元素需要進(jìn)行操作時(shí),逐一進(jìn)行定位就會(huì)比較麻煩。例如需要同時(shí)選擇頁(yè)面上的所有復(fù)選框,這時(shí)候可以通過(guò)一組元素的定位方法進(jìn)行定位。方法說(shuō)明find_elements_by_id()通過(guò)元素的id屬性值定位一組元素find_elements_by_name()通過(guò)元素的name屬性值定位一組元素find_elements_by_class_name()通過(guò)元素的class屬性值定位一組元素find_elements_by_tag_name()通過(guò)元素的標(biāo)簽名定位一組元素find_elements_by_link_text()通過(guò)超鏈接全部文本內(nèi)容定位一組元素find_elements_by_partial_link_text()通過(guò)超鏈接部分或全部文本內(nèi)容定位一組元素find_elements_by_xpath()通過(guò)元素路徑定位一組元素find_elements_by_css_selector()通過(guò)css選擇器定位一組元素表5-8定位一組元素的方法活動(dòng)二定位元素一、Keys類
用selenium做自動(dòng)化測(cè)試,有時(shí)候會(huì)遇到需要用到模擬鍵盤(pán)操作的情況,而selenium給我們提供了一個(gè)類來(lái)處理這類事件——Keys類。Keys類提供了對(duì)鍵盤(pán)上幾乎所有按鍵的操作。這個(gè)類能夠滿足我們對(duì)鍵盤(pán)基本操作的需求。注意:模擬鍵盤(pán)的操作需要先導(dǎo)入鍵盤(pán)模塊,腳本為:frommon.keysimportKeys活動(dòng)三模擬鍵盤(pán)操作Keys常用按鍵列表回車鍵
Keys.ENTER刪除鍵
Keys.BACK_SPACE空格鍵
Keys.SPACETAB鍵
Keys.TABShift鍵
Keys.SHIFTESC鍵
Keys.ESCAPE上鍵
Keys.ARROW_UP下鍵
Keys.ARROW_DOWN左鍵
Keys.ARROW_LEFT右鍵
Keys.ARROW_RIGHT“+”鍵Keys.
ADD“-”鍵Keys.
SUBTRACT“*”鍵Keys.MULTIPLY“/”鍵Keys.DIVIDE“=”鍵
Keys.EQUALS全選(Ctrl+A)Keys.CONTROL,'a'復(fù)制(Ctrl+C)Keys.CONTROL,'c'剪切(Ctrl+X)Keys.CONTROL,'x'粘貼(Ctrl+V)Keys.CONTROL,'v'數(shù)字0Keys.NUMPAD0數(shù)字1Keys.NUMPAD1…….數(shù)字9Keys.NUMPAD9鍵盤(pán)F1 Keys.F1…….鍵盤(pán)F12
Keys.F12活動(dòng)三模擬鍵盤(pán)操作三、send_keys方法
send_keys()方法可以用來(lái)模擬鍵盤(pán)輸入,將按鍵發(fā)送到當(dāng)前活動(dòng)對(duì)象,就好像它們是從鍵盤(pán)輸入的一樣。send_keys()方法的參數(shù)可以是字符串常量或變量,也可以是Keys類中的按鍵。例如:driver.find_element_by_id(“kw”).send_keys(“軟件測(cè)試”)driver.find_element_by_id(“kw”).send_keys(Keys.TAB)活動(dòng)三模擬鍵盤(pán)操作在百度首頁(yè)的輸入框中做模擬鍵盤(pán)操作的練習(xí)。fromseleniumimportwebdriver#引入Keys模塊frommon.keysimportKeys
importtime
driver=webdriver.Chrome()
driver.get(“”)
#輸入框輸入文字“selenium書(shū)”
driver.find_element_by_id(“kw”).send_keys(“selenium書(shū)")#刪除最后一個(gè)字符“書(shū)”driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)活動(dòng)三模擬鍵盤(pán)操作#輸入空格鍵+“教程”
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
driver.find_element_by_id("kw").send_keys("教程")#ctrl+a全選輸入框內(nèi)容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"a")#ctrl+x剪切輸入框內(nèi)容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"x")
#ctrl+v粘貼內(nèi)容到輸入框
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"v")#定位到“百度一下”按鈕,按下回車鍵driver.find_element_by_id("su").send_keys(Keys.ENTER)活動(dòng)三模擬鍵盤(pán)操作一、鼠標(biāo)單擊操作
WebDriver提供了click()
方法用來(lái)模擬鼠標(biāo)單擊操作。
click()
方法可以用來(lái)單擊一個(gè)元素,前提是這個(gè)元素是可以被單擊的對(duì)象。
所以,click()方法可用于單擊一個(gè)按鈕,還能單擊文本鏈接、圖片鏈接、復(fù)選框、單選框、下拉框等任何可以單擊的元素。例如:
driver.find_element_by_id("su").click()活動(dòng)四模擬鼠標(biāo)操作二、ActionChains類
除了鼠標(biāo)單擊操作,其余的鼠標(biāo)操作方法都是由ActionChains類來(lái)提供。
引入ActionChains類的腳本:frommon.action_chainsimportActionChainsActionChains執(zhí)行原理:
調(diào)用ActionChains中的方法時(shí),不會(huì)立即執(zhí)行,而是會(huì)將所有的操作按順序存放在一個(gè)隊(duì)列里,當(dāng)你調(diào)用perform()方法時(shí),會(huì)按照隊(duì)列里面的順序進(jìn)行執(zhí)行。其中調(diào)用的perform()方法必須放在ActionChains方法的最后。活動(dòng)四模擬鼠標(biāo)操作三、鼠標(biāo)右擊操作
ActionChains類中用來(lái)模擬鼠標(biāo)右擊操作的方法是context_click()。例:實(shí)現(xiàn)百度輸入框的右擊操作。fromseleniumimportwebdriver
#引入ActionChains類
frommon.action_chainsimportActionChains
driver=webdriver.Chrome()
driver.get("")
#定位到要右擊的元素
right=driver.find_element_by_id("kw")
#對(duì)定位到的元素執(zhí)行鼠標(biāo)右鍵操作
ActionChains(driver).context_click(right).perform()活動(dòng)四模擬鼠標(biāo)操作四、鼠標(biāo)雙擊操作ActionChains類中用來(lái)模擬鼠標(biāo)雙擊操作的方法是double_click()。例:…….
#定位到要雙擊的元素double=driver.find_element_by_id("su")#對(duì)定位到的元素執(zhí)行雙擊操作ActionChains(driver).double_click(double).perform()…….活動(dòng)四模擬鼠標(biāo)操作五、鼠標(biāo)懸停操作ActionChains類中用來(lái)模擬鼠標(biāo)懸停操作的方法是move_to_element()。例:將鼠標(biāo)懸停在百度首頁(yè)的文本鏈接“更多”上,效果如圖所示。fromseleniumimportwebdriver
#引入ActionChains類
frommon.action_chainsimportActionChains
driver=webdriver.Chrome()
driver.get("")
#定位到要懸停的元素
above=driver.find_element_by_link_text("更多")
#對(duì)定位到的元素執(zhí)行懸停操作
ActionChains(driver).move_to_element(above).perform()活動(dòng)四模擬鼠標(biāo)操作六、鼠標(biāo)拖放操作ActionChains類中用來(lái)模擬鼠標(biāo)拖放操作的方法是drag_and_drop(source,target)。各參數(shù)含義:source:鼠標(biāo)拖動(dòng)的源元素target:鼠標(biāo)釋放的目標(biāo)元素方法作用:實(shí)現(xiàn)在源元素上按住鼠標(biāo)左鍵,然后移動(dòng)到目標(biāo)元素上釋放。例:#定位源元素s=driver.find_element_by_id(“xx")#定位目標(biāo)元素
t=driver.find_element_by_id(“xx")#執(zhí)行鼠標(biāo)的拖放操作ActionChains(driver).drag_and_drop(s,t).perform()活動(dòng)四模擬鼠標(biāo)操作click(on_element=None)——單擊鼠標(biāo)左鍵click_and_hold(on_element=None)——點(diǎn)擊鼠標(biāo)左鍵,不松開(kāi)context_click(on_element=None)——點(diǎn)擊鼠標(biāo)右鍵double_click(on_element=None)——雙擊鼠標(biāo)左鍵drag_and_drop(source,target)——拖拽到某個(gè)元素然后松開(kāi)drag_and_drop_by_offset(source,xoffset,yoffset)——拖拽到某個(gè)坐標(biāo)然后松開(kāi)key_down(value,element=None)——按下某個(gè)鍵盤(pán)上的鍵key_up(value,element=None)——松開(kāi)某個(gè)鍵move_by_offset(xoffset,yoffset)——鼠標(biāo)從當(dāng)前位置移動(dòng)到某個(gè)坐標(biāo)move_to_element(to_element)——鼠標(biāo)移動(dòng)到某個(gè)元素move_to_element_with_offset(to_element,xoffset,yoffset)——移動(dòng)到距某個(gè)元素(左上角坐標(biāo))多少距離的位置perform()——執(zhí)行鏈中的所有動(dòng)作release(on_element=None)——在某個(gè)元素位置松開(kāi)鼠標(biāo)左鍵send_keys(*keys_to_send)——發(fā)送某個(gè)鍵到當(dāng)前焦點(diǎn)的元素send_keys_to_element(element,*keys_to_send)——發(fā)送某個(gè)鍵到指定元素ActionChains類方法列表活動(dòng)四模擬鼠標(biāo)操作任務(wù)三SeleniumWebDriver的高級(jí)應(yīng)用時(shí)間等待主要用于以下兩種情況:
測(cè)試過(guò)程中,我們發(fā)現(xiàn)腳本執(zhí)行的時(shí)候、展現(xiàn)出來(lái)的效果很快結(jié)束了,中間的運(yùn)行過(guò)程沒(méi)有看清楚。為了觀察執(zhí)行效果我們會(huì)在需要停頓的位置增加一個(gè)等待時(shí)間。這種等待時(shí)間我們只是為了我們便于觀察,這種情況下是否包含等待時(shí)間不會(huì)影響我們的執(zhí)行結(jié)果。在我們打開(kāi)一個(gè)網(wǎng)站的時(shí)候,由于環(huán)境的因素導(dǎo)致頁(yè)面沒(méi)有下載完成時(shí)去定位元素,此時(shí)無(wú)法找到元素,這個(gè)時(shí)候會(huì)影響到我們的執(zhí)行結(jié)果。這個(gè)時(shí)候我們?cè)黾右粋€(gè)等待時(shí)間,等待指定元素被加載出來(lái)之后,我們才去定位該元素,就不會(huì)出現(xiàn)定位失敗的現(xiàn)象了?;顒?dòng)一設(shè)置時(shí)間等待一、強(qiáng)制等待
針對(duì)上述第一種情況的時(shí)間等待,一般使用強(qiáng)制等待方法sleep()來(lái)實(shí)現(xiàn)。sleep()方法是由Python的time模塊提供的,所以使用時(shí)需要先做導(dǎo)入。導(dǎo)入代碼如下: fromtimeimportsleep
使用格式: sleep(seconds)
參數(shù)seconds表示程序的休眠時(shí)間,即強(qiáng)制等待時(shí)間,以秒為單位。
當(dāng)然time.sleep方法也可以用在第二種情況下。但是有個(gè)明顯的缺點(diǎn)是我們無(wú)法預(yù)知到底設(shè)置幾秒的等待時(shí)間才能確保要定位的元素能夠加載到頁(yè)面上,時(shí)間短了、元素可能還是沒(méi)有出現(xiàn),時(shí)間長(zhǎng)了會(huì)導(dǎo)致執(zhí)行效率下降。所以針對(duì)第二種情況使用time.sleep不是最佳選擇。
針對(duì)第二種情況,WebDriver提供了兩種類型的等待,分別稱作隱式等待和顯式等待?;顒?dòng)一設(shè)置時(shí)間等待二、隱式等待隱式等待,也叫智能等待,是Selenium提供的一個(gè)超時(shí)等待。所謂隱式等待,就是我們?cè)O(shè)置了一個(gè)等待時(shí)間范圍,這個(gè)等待的時(shí)間是不固定的,最長(zhǎng)的等待時(shí)間也莫過(guò)于我們?cè)O(shè)置的最大值。
在腳本中,可以使用隱式等待去等待一個(gè)元素被發(fā)現(xiàn)或一個(gè)命令完成。如果超出了設(shè)置的時(shí)間則會(huì)拋出異常?;顒?dòng)一設(shè)置時(shí)間等待隱式等待方法:
implicitly_wait(n)n是等待的秒數(shù),即最長(zhǎng)等待時(shí)間,默認(rèn)值為0。例:fromseleniumimportwebdriver#導(dǎo)入NoSuchElementException異常類
frommon.exceptionsimportNoSuchElementException
fromtimeimportctime
driver=webdriver.Chrome()活動(dòng)一設(shè)置時(shí)間等待#設(shè)置隱式等待10秒
driver.implicitly_wait(10)
driver.get(“”)
try:
print(ctime())
driver.find_element_by_id(“kw”).send_keys(‘自動(dòng)化測(cè)試')
exceptNoSuchElementExceptionase:
print(e)
finally:
print(ctime())活動(dòng)一設(shè)置時(shí)間等待
說(shuō)明:implicitly_wait()默認(rèn)參數(shù)的單位為秒,本例中設(shè)置等待時(shí)長(zhǎng)為10秒。首先,這10秒并非一個(gè)固定的等待時(shí)間,它并不影響腳本的執(zhí)行速度。其次,它并不針對(duì)頁(yè)面上的某一元素進(jìn)行等待。當(dāng)腳本執(zhí)行到某個(gè)元素定位時(shí),如果元素可以定位,則繼續(xù)執(zhí)行;如果元素定位不到,則它將以輪詢的方式不斷地判斷元素是否被定位到。假設(shè)在第六秒定位到了元素則繼續(xù)執(zhí)行,若直到超出設(shè)置時(shí)長(zhǎng)(10秒)還沒(méi)有定位到元素,則拋出異常。
思考:
將find_element_by_id(“kw”)中的“kw”
改成“kw11”,再執(zhí)行會(huì)怎樣?活動(dòng)一設(shè)置時(shí)間等待三、顯式等待
在Selenium中,顯示等待由WebDriverWait類實(shí)現(xiàn)。
WebDriverWait類工作原理:
在設(shè)置時(shí)間內(nèi),默認(rèn)每隔一段時(shí)間檢測(cè)一次指定的條件是否成立,如果條件成立,可以立即執(zhí)行后續(xù)的代碼,不必等到設(shè)置時(shí)間結(jié)束;反之,如果超過(guò)設(shè)置時(shí)間檢測(cè)不成立則拋出異常。格式:WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
各參數(shù)含義:driver
:瀏覽器驅(qū)動(dòng)timeout
:最長(zhǎng)等待時(shí)間,默認(rèn)以秒為單位poll_frequency
:檢測(cè)的間隔時(shí)間,默認(rèn)為0.5s
ignored_exceptions
:超時(shí)后的異常信息,默認(rèn)情況下拋出NoSuchElementException?;顒?dòng)一設(shè)置時(shí)間等待WebDriverWait()一般和until()或until_not()方法配合使用。until方法格式:until(method,message=‘’)作用:調(diào)用method,直到返回值不為False或不為空。
參數(shù)含義:method:需要執(zhí)行的方法。message:拋出異常時(shí)的文案,默認(rèn)返回TimeoutException,表示超時(shí)。until_not方法格式:until_not(method,message=‘’)作用:
調(diào)用method,直到返回值為False或?yàn)榭铡?/p>
WebDriverWait()和until的配合使用:WebDriverWait(瀏覽器實(shí)例,超時(shí)時(shí)長(zhǎng),調(diào)用頻率,異常信息).until(要調(diào)用的方法,超時(shí)時(shí)返回的信息)
活動(dòng)一設(shè)置時(shí)間等待示例:在百度頁(yè)面的輸入框中輸入“selenium”,要求:為定位輸入框操作添加顯式等待,等待時(shí)間5秒,定位操作的執(zhí)行間隔設(shè)為0.5秒。腳本:fromseleniumimportwebdriver
fromtimeimportctime#導(dǎo)入顯示等待類
fromselenium.webdriver.support.uiimportWebDriverWaitfrommon.byimportBy
fromselenium.webdriver.supportimportexpected_conditionsasEC
driver=webdriver.Chrome()
driver.get("")
print(ctime())活動(dòng)一設(shè)置時(shí)間等待try:#設(shè)置顯式等待5秒,檢測(cè)間隔時(shí)間0.5秒
element=WebDriverWait(driver,5,0.5).until(
EC.presence_of_element_located((By.ID,"kw")))
element.send_keys('selenium')
except:
print("未找到元素")
finally:
print(ctime())
優(yōu)點(diǎn)presence_of_element_located()方法用于判斷元素是否已被加載,返回值為布爾類型。方法的第一個(gè)參數(shù)是定位的類型,由By提供;第二個(gè)參數(shù)是對(duì)應(yīng)的屬性值。
在使用By之前需要將By類導(dǎo)入:frommon.byimportBy活動(dòng)一設(shè)置時(shí)間等待在操作頁(yè)面時(shí),我們點(diǎn)擊某個(gè)鏈接,會(huì)彈出新的窗口。有時(shí)候我們又想要切換到原來(lái)的窗口上進(jìn)行操作。怎樣才能切換到原來(lái)的窗口呢?
Selenium提供了切換窗口的方法:
switch_to.window()活動(dòng)二切換窗口
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建省南平市渭田中學(xué)高三英語(yǔ)下學(xué)期期末試題含解析
- 2024年配偶忠實(shí)協(xié)議范本
- 歷史巨擘的故事力
- 科研農(nóng)業(yè)的探索之旅
- 2024日照勞動(dòng)合同范本
- 外包客服招聘中介合同(2篇)
- 大包合同范本(2篇)
- 2024攝影服務(wù)細(xì)節(jié)化協(xié)議范例版B版
- 專項(xiàng)資料印刷保密協(xié)議:2024文印部責(zé)任書(shū)版B版
- 防盜門(mén)供貨安裝合同
- (完整版)非計(jì)劃性拔管魚(yú)骨圖
- 工程結(jié)算表單模板
- 測(cè)繪工程測(cè)量技術(shù)數(shù)字測(cè)圖畢業(yè)設(shè)計(jì)論文
- 納米技術(shù)在中藥領(lǐng)域的應(yīng)用
- 收貨確認(rèn)單模版.docx
- 機(jī)械設(shè)備安裝工程施工和驗(yàn)收通用規(guī)范標(biāo)準(zhǔn)
- 某火車站雨棚鋼結(jié)構(gòu)施工方案
- 水泵水輪機(jī)結(jié)構(gòu)介紹
- 20-5T雙梁橋式起重機(jī)設(shè)計(jì)(全套圖紙)
- 模板安裝施工合同
- 管道閉水試驗(yàn)記錄表自動(dòng)計(jì)算軟件
評(píng)論
0/150
提交評(píng)論