軟件測試 課件 單元5 自動化測試_第1頁
軟件測試 課件 單元5 自動化測試_第2頁
軟件測試 課件 單元5 自動化測試_第3頁
軟件測試 課件 單元5 自動化測試_第4頁
軟件測試 課件 單元5 自動化測試_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

單元5自動化測試目錄自動化測試基礎(chǔ)任務一SeleniumWebDriver的基本應用任務二SeleniumWebDriver的高級應用任務三任務一自動化測試基礎(chǔ)活動一認識自動化測試

自動化測試是把以人為驅(qū)動的測試行為轉(zhuǎn)化為機器執(zhí)行的一種過程,即模擬手工測試步驟通過執(zhí)行程序語言編制的測試腳本自動地測試軟件。

自動化測試可以把我們需要花費大量時間去重復執(zhí)行的測試操作用腳本實現(xiàn),把測試人員從枯燥單調(diào)的重復性勞動中解放出來,進而節(jié)省人力、時間和資源,提高測試效率。一般滿足以下三個條件就可以對項目實施自動化測試:項目需求變動不頻繁項目周期較長自動化測試腳本可重復使用活動一認識自動化測試常見的自動化測試工具LoadRunner適用于性能測試,通過模擬大量用戶實施并發(fā)負載及實時性能監(jiān)測的方式來確認和查找問題。LoadRunner可適用于各種體系架構(gòu)的自動負載測試,能預測系統(tǒng)行為并評估系統(tǒng)性能。QuickTestProfessional適用于Web自動化測試,提供符合所有主要應用軟件環(huán)境的功能測試和回歸測試的自動化。采用關(guān)鍵字驅(qū)動的理念以簡化測試用例的創(chuàng)建和維護。它讓用戶可以直接錄制屏幕上的操作流程,自動生成功能測試或者回歸測試用例。Postman適用于接口測試,提供功能強大的WebAPI和HTTP請求的調(diào)試,它能夠發(fā)送任何類型的HTTP請求,并且能附帶任何數(shù)量的參數(shù)和Headers,還提供測試數(shù)據(jù)和環(huán)境配置數(shù)據(jù)的導入導出。JMeter適用于接口測試,性能測試,100%的用java實現(xiàn)。用于模擬在服務器、網(wǎng)絡(luò)或者其他對象上附加高負載以測試他們提供服務的受壓能力,或者分析他們提供的服務在不同負載條件下的總性能情況。Selenium適用于Web自動化測試,利用Selenium編寫的自動化測試腳本可以模擬用戶在瀏覽器中的各種操作,支持的瀏覽器包括IE、Firefox、Chrome等,還支持多平臺和多語言。Appium適用于App自動化測試,支持iOS和Android平臺,支持Python、Java等語言。當收到客戶端的連接后,就會監(jiān)聽到命令,然后在移動設(shè)備上執(zhí)行這些命令,最后將執(zhí)行結(jié)果放在HTTP響應中返還給客戶端。AppiumSeleniumJMeterPostmanQTPLoadRunner活動一認識自動化測試自動化測試的流程活動一認識自動化測試活動二搭建自動化測試環(huán)境四款軟件:PythonPython語言開發(fā)環(huán)境基于Web的自動化測試工具SeleniumPyCharmPythonIDE谷歌瀏覽器Chrome一、安裝Python開發(fā)環(huán)境

從Python官網(wǎng)下載安裝程序,雙擊Python,根據(jù)提示一步步操作。1、雙擊安裝文件(如python-3.11.5-amd64.exe)進行安裝,如下圖所示。按照圈中區(qū)域進行設(shè)置,切記要勾選打鉤的框,如果不進行勾選,需要自己配置環(huán)境變量,勾選后會自動配置環(huán)境變量。然后再點擊“Customizeinstallation(自定義安裝)”進入到下一步?;顒佣罱ㄗ詣踊瘻y試環(huán)境2、點擊自定義安裝后彈出如下圖所示的安裝界面,將所有的復選框進行勾選,點擊Next?;顒佣罱ㄗ詣踊瘻y試環(huán)境3、彈出新的安裝界面,如下圖所示。

界面中只勾選圖中選中的復選框即可。然后選擇安裝路徑。我們可以通過點擊Browse按鈕自行選擇安裝路徑,也可以直接點擊Install在默認路徑進行安裝,點擊Install后等待安裝完成?;顒佣罱ㄗ詣踊瘻y試環(huán)境4、安裝完成后為了檢查我們的Python是否安裝成功,可以使用win+R打開cmd命令窗口,在窗口中輸入python命令進行查詢,出現(xiàn)如下圖所示的提示信息則表示成功了?;顒佣罱ㄗ詣踊瘻y試環(huán)境二、安裝Selenium打開cmd命令窗口在線安裝Selenium。命令:pipinstallselenium說明:通過“pipinstallselenium”命令安裝Selenium時,系統(tǒng)將默認安裝當前最新的版本。如果想要安裝指定的Selenium版本,可以使用“pipinstallselenium==版本號”命令?;顒佣罱ㄗ詣踊瘻y試環(huán)境安裝完成后可以用

pipshowselenium命令檢查是否安裝成功。如下圖所示。活動二搭建自動化測試環(huán)境三、安裝PyCharm

PyCharm安裝包需要從網(wǎng)上自行下載。安裝步驟如下:1、雙擊PyCharm安裝包,彈出如下圖所示對話框,之后點擊Next?;顒佣罱ㄗ詣踊瘻y試環(huán)境2、選擇安裝路徑(也可以使用默認路徑),選擇完成后,點擊Next,如下圖所示。活動二搭建自動化測試環(huán)境3、選擇相對應的系統(tǒng)和文件后綴名,之后點擊Next,如圖所示?;顒佣罱ㄗ詣踊瘻y試環(huán)境4、在開始安裝界面點擊Install,進行安裝,如圖所示。活動二搭建自動化測試環(huán)境5、安裝成功之后勾選復選框,點擊Finish,表示安裝完成并運行PyCharm。如圖所示?;顒佣罱ㄗ詣踊瘻y試環(huán)境四、安裝Chrome瀏覽器以及驅(qū)動1、安裝Chrome瀏覽器

訪問GoogleChrome官方網(wǎng)站下載Chrome瀏覽器安裝程序,下載地址:/chrome/,然后根據(jù)提示一步步完成安裝。2、安裝Chrome瀏覽器驅(qū)動

要想通過自動化腳本打開瀏覽器,還需要安裝瀏覽器驅(qū)動。除了Firefox瀏覽器的驅(qū)動已經(jīng)默認包含在SeleniumWedDriver包里了,可以直接調(diào)用。如果要使用其他瀏覽器,比如IE瀏覽器或者谷歌瀏覽器,都需要安裝相應的瀏覽器驅(qū)動?;顒佣罱ㄗ詣踊瘻y試環(huán)境

注意下載與谷歌瀏覽器版本對應的驅(qū)動。然后將谷歌瀏覽器驅(qū)動文件chromedriver.exe放置在python安裝文件的根目錄“...\Python\Python35”下,如下圖所示。活動二搭建自動化測試環(huán)境任務二SeleniumWebDriver的基本應用一、引入webdriver模塊

要在Pycharm中使用WebDriver編寫自動化測試腳本,首先需要引入WebDriver模塊。代碼如下:

fromseleniumimportwebdriver活動一熟悉WebDriver基礎(chǔ)二、瀏覽器的打開、關(guān)閉方法說明webdriver.瀏覽器名稱()打開測試使用的瀏覽器get(url)打開頁面quit()退出當前瀏覽器close()關(guān)閉瀏覽器的當前窗口表5-5打開、關(guān)閉瀏覽器的方法活動一熟悉WebDriver基礎(chǔ)示例:調(diào)用谷歌瀏覽器訪問百度首頁,然后關(guān)閉窗口。fromseleniumimportwebdriver

#打開Chrome瀏覽器使用Chrome()方法driver=webdriver.Chrome()

driver.get("")

driver.close()活動一熟悉WebDriver基礎(chǔ)三、瀏覽器的前進、后退和刷新表5-6瀏覽器的前進、后退和刷新方法方法說明forward()瀏覽器前進back()瀏覽器后退refresh()瀏覽器刷新活動一熟悉WebDriver基礎(chǔ)示例:實現(xiàn)百度首頁和百度新聞頁面之間的切換。fromseleniumimportwebdriver

driver=webdriver.Chrome()

driver.get("")

driver.get("")

driver.back()#后退到“百度首頁”

driver.forward()#前進到“百度新聞頁面”driver.refresh()#刷新頁面活動一熟悉WebDriver基礎(chǔ)四、瀏覽器窗口的設(shè)置表5-7設(shè)置瀏覽器窗口的大小和位置的方法方法說明maximize_window()將瀏覽器窗口最大化minimize_window()將瀏覽器窗口最小化set_window_position(x,y)將瀏覽器窗口移動到指定位置set_window_size(width,height)將瀏覽器窗口設(shè)置為指定大小set_window_rect(x,y,width,height)將瀏覽器窗口移動到指定位置并設(shè)置為指定大小活動一熟悉WebDriver基礎(chǔ)示例:設(shè)置瀏覽器窗口的大小和位置。fromseleniumimportwebdriver

driver=webdriver.Chrome()

driver.get("")#將瀏覽器窗口最小化driver.minimize_window()#將瀏覽器窗口最大化driver.maximize_window()#設(shè)置瀏覽器窗口大小為寬500像素、高600像素driver.set_window_size(500,600)#將瀏覽器窗口移動到橫坐標200像素、縱坐標100像素的位置driver.set_window_position(200,100)#將瀏覽器窗口移動到橫坐標200像素、縱坐標200像素的位置并設(shè)置窗口大小為寬400像素、高400像素driver.set_window_rect(200,200,400,400)活動一熟悉WebDriver基礎(chǔ)自動化要做的就是模擬鼠標和鍵盤來操作頁面上的元素,或單擊,或輸入,或鼠標懸停等。

操作這些元素的前提是需要找到它們,自動化工具無法像測試人員一樣可以通過肉眼來分辨頁面上的元素,并且知道它們是做什么用的,那么如何找到它們呢?活動二定位元素通過前端工具,可以看到頁面上的元素都是由一行行的代碼組成的,它們之間有層級地組織起來,每個元素有不同的標簽名和屬性值。WebDriver就是通過這些信息來找到不同的元素的?;顒佣ㄎ辉匾?、單個元素的定位

WebDriver提供了八種對單個元素進行定位的方法,在Python語言中,所對應的方法如下: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()活動二定位元素格式:find_element_by_id()1、id定位id定位是通過元素的id屬性值來定位元素。由于在頁面中id屬性值一般不會重復,所以如果元素有id屬性,可以優(yōu)先考慮使用id定位方法定位元素。

以百度頁面的輸入框為例。先打開百度頁面,右擊輸入框,在彈出菜單中選“檢查”,出現(xiàn)的界面如右圖所示。定位輸入框的腳本:find_element_by_id(“kw”)活動二定位元素格式:find_element_by_name()2、name定位在編寫自動化腳本的時候,如果頁面中某個元素沒有id屬性,那我們就沒有辦法通過id屬性去定位頁面元素,但是如果這個元素的name屬性值是獨一無二的,我們就可以使用name屬性來定位。

以百度頁面的輸入框為例,如右圖所示。定位輸入框的腳本:find_element_by_name(“wd”)活動二定位元素格式:find_element_by_class_name()3、class_name定位

如果某個頁面元素,既沒有id屬性,也沒有name屬性,但是我們可以在定位的頁面中找到class屬性,那么我們就可以使用class屬性來定位。

以百度頁面的輸入框為例,如右圖所示。定位輸入框的腳本:find_element_by_class_name(“s_ipt”)活動二定位元素格式:

find_element_by_tag_name()4、tag_name定位

HTML的本質(zhì)就是通過tag來定義實現(xiàn)不同的功能,每一個元素本質(zhì)上也是一個tag。因為一個tag往往用來定義一類功能,所以通過tag識別某個元素的概率很低。打開任意一個頁面,都會發(fā)現(xiàn)存在大量的<div>、<input>、<a>等tag。所以很難通過tagname去區(qū)分不同的元素。以百度頁面為例,如右圖所示。腳本find_element_by_tag_name(“input”)不能定位到文本框?;顒佣ㄎ辉馗袷剑?/p>

find_element_by_link_text()5、link_text定位link_text定位專門用來定位文本鏈接,使用超鏈接的文本做參數(shù)來進行定位。

右擊百度頁面左上角的“地圖”,選“檢查”,如右圖所示。通過元素屬性可以看出,標簽名為a,且href

=“http://map.baidu.com”,說明它是個超鏈接,對于這種元素,可以用link定位。定位“地圖”鏈接的腳本:find_element_by_link_text(“地圖”)活動二定位元素格式:find_element_by_partial_link_text()6、partial_link_text定位link_text定位方法是使用超鏈接文本的全部字符串進行定位。有時候一個超鏈接文本的字符串可能比較長,如果輸入全稱的話,會顯示很長,既占地方而且也易出錯,這時候可以用partial_link_text定位。這是一種模糊匹配方式,只要截取超鏈接文本中一部分字符串就可以。

如右圖所示的新浪網(wǎng)站。定位“跟著習近平學黨史—增強理論自信”鏈接的腳本:find_element_by_partial_link_text(“學黨史”)活動二定位元素格式:find_element_by_xpath()7、XPath定位

XPath即為XML路徑語言,是一種用來確定XML文檔中某部分位置的語言。XPath基于XML的樹狀結(jié)構(gòu),提供在數(shù)據(jù)結(jié)構(gòu)樹中找尋節(jié)點的能力。因為HTML可以看做XML的一種實現(xiàn),所以selenium用戶可以使用這種強大的語言在web應用中定位元素。

如果熟悉XPath語法可手工編寫XPath路徑。更簡單的做法是直接從網(wǎng)站頁面復制XPath路徑。以百度網(wǎng)站為例,如右圖所示。XPath定位輸入框的腳本:find_element_by_xpath(‘//*[@id="kw"]’)活動二定位元素格式:find_element_by_css_selector()8、css_selector定位

css_selector定位是另外一種通過路徑導航實現(xiàn)某個元素的定位方法,但是此方法比XPath更為簡潔,運行速度更快。我們可以通過定位到某個頁面元素后,直接右擊選擇“Copy–Copyselector”復制出CSS路徑,然后放到css_selector定位方法中做參數(shù)進行元素定位。以百度網(wǎng)站為例,如右圖所示。CSS定位輸入框的腳本:find_element_by_css_selector(“#kw”)活動二定位元素

當測試頁面上有多個元素需要進行操作時,逐一進行定位就會比較麻煩。例如需要同時選擇頁面上的所有復選框,這時候可以通過一組元素的定位方法進行定位。方法說明find_elements_by_id()通過元素的id屬性值定位一組元素find_elements_by_name()通過元素的name屬性值定位一組元素find_elements_by_class_name()通過元素的class屬性值定位一組元素find_elements_by_tag_name()通過元素的標簽名定位一組元素find_elements_by_link_text()通過超鏈接全部文本內(nèi)容定位一組元素find_elements_by_partial_link_text()通過超鏈接部分或全部文本內(nèi)容定位一組元素find_elements_by_xpath()通過元素路徑定位一組元素find_elements_by_css_selector()通過css選擇器定位一組元素表5-8定位一組元素的方法活動二定位元素一、Keys類

用selenium做自動化測試,有時候會遇到需要用到模擬鍵盤操作的情況,而selenium給我們提供了一個類來處理這類事件——Keys類。Keys類提供了對鍵盤上幾乎所有按鍵的操作。這個類能夠滿足我們對鍵盤基本操作的需求。注意:模擬鍵盤的操作需要先導入鍵盤模塊,腳本為:frommon.keysimportKeys活動三模擬鍵盤操作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'復制(Ctrl+C)Keys.CONTROL,'c'剪切(Ctrl+X)Keys.CONTROL,'x'粘貼(Ctrl+V)Keys.CONTROL,'v'數(shù)字0Keys.NUMPAD0數(shù)字1Keys.NUMPAD1…….數(shù)字9Keys.NUMPAD9鍵盤F1 Keys.F1…….鍵盤F12

Keys.F12活動三模擬鍵盤操作三、send_keys方法

send_keys()方法可以用來模擬鍵盤輸入,將按鍵發(fā)送到當前活動對象,就好像它們是從鍵盤輸入的一樣。send_keys()方法的參數(shù)可以是字符串常量或變量,也可以是Keys類中的按鍵。例如:driver.find_element_by_id(“kw”).send_keys(“軟件測試”)driver.find_element_by_id(“kw”).send_keys(Keys.TAB)活動三模擬鍵盤操作在百度首頁的輸入框中做模擬鍵盤操作的練習。fromseleniumimportwebdriver#引入Keys模塊frommon.keysimportKeys

importtime

driver=webdriver.Chrome()

driver.get(“”)

#輸入框輸入文字“selenium書”

driver.find_element_by_id(“kw”).send_keys(“selenium書")#刪除最后一個字符“書”driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)活動三模擬鍵盤操作#輸入空格鍵+“教程”

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)活動三模擬鍵盤操作一、鼠標單擊操作

WebDriver提供了click()

方法用來模擬鼠標單擊操作。

click()

方法可以用來單擊一個元素,前提是這個元素是可以被單擊的對象。

所以,click()方法可用于單擊一個按鈕,還能單擊文本鏈接、圖片鏈接、復選框、單選框、下拉框等任何可以單擊的元素。例如:

driver.find_element_by_id("su").click()活動四模擬鼠標操作二、ActionChains類

除了鼠標單擊操作,其余的鼠標操作方法都是由ActionChains類來提供。

引入ActionChains類的腳本:frommon.action_chainsimportActionChainsActionChains執(zhí)行原理:

調(diào)用ActionChains中的方法時,不會立即執(zhí)行,而是會將所有的操作按順序存放在一個隊列里,當你調(diào)用perform()方法時,會按照隊列里面的順序進行執(zhí)行。其中調(diào)用的perform()方法必須放在ActionChains方法的最后?;顒铀哪M鼠標操作三、鼠標右擊操作

ActionChains類中用來模擬鼠標右擊操作的方法是context_click()。例:實現(xiàn)百度輸入框的右擊操作。fromseleniumimportwebdriver

#引入ActionChains類

frommon.action_chainsimportActionChains

driver=webdriver.Chrome()

driver.get("")

#定位到要右擊的元素

right=driver.find_element_by_id("kw")

#對定位到的元素執(zhí)行鼠標右鍵操作

ActionChains(driver).context_click(right).perform()活動四模擬鼠標操作四、鼠標雙擊操作ActionChains類中用來模擬鼠標雙擊操作的方法是double_click()。例:…….

#定位到要雙擊的元素double=driver.find_element_by_id("su")#對定位到的元素執(zhí)行雙擊操作ActionChains(driver).double_click(double).perform()…….活動四模擬鼠標操作五、鼠標懸停操作ActionChains類中用來模擬鼠標懸停操作的方法是move_to_element()。例:將鼠標懸停在百度首頁的文本鏈接“更多”上,效果如圖所示。fromseleniumimportwebdriver

#引入ActionChains類

frommon.action_chainsimportActionChains

driver=webdriver.Chrome()

driver.get("")

#定位到要懸停的元素

above=driver.find_element_by_link_text("更多")

#對定位到的元素執(zhí)行懸停操作

ActionChains(driver).move_to_element(above).perform()活動四模擬鼠標操作六、鼠標拖放操作ActionChains類中用來模擬鼠標拖放操作的方法是drag_and_drop(source,target)。各參數(shù)含義:source:鼠標拖動的源元素target:鼠標釋放的目標元素方法作用:實現(xiàn)在源元素上按住鼠標左鍵,然后移動到目標元素上釋放。例:#定位源元素s=driver.find_element_by_id(“xx")#定位目標元素

t=driver.find_element_by_id(“xx")#執(zhí)行鼠標的拖放操作ActionChains(driver).drag_and_drop(s,t).perform()活動四模擬鼠標操作click(on_element=None)——單擊鼠標左鍵click_and_hold(on_element=None)——點擊鼠標左鍵,不松開context_click(on_element=None)——點擊鼠標右鍵double_click(on_element=None)——雙擊鼠標左鍵drag_and_drop(source,target)——拖拽到某個元素然后松開drag_and_drop_by_offset(source,xoffset,yoffset)——拖拽到某個坐標然后松開key_down(value,element=None)——按下某個鍵盤上的鍵key_up(value,element=None)——松開某個鍵move_by_offset(xoffset,yoffset)——鼠標從當前位置移動到某個坐標move_to_element(to_element)——鼠標移動到某個元素move_to_element_with_offset(to_element,xoffset,yoffset)——移動到距某個元素(左上角坐標)多少距離的位置perform()——執(zhí)行鏈中的所有動作release(on_element=None)——在某個元素位置松開鼠標左鍵send_keys(*keys_to_send)——發(fā)送某個鍵到當前焦點的元素send_keys_to_element(element,*keys_to_send)——發(fā)送某個鍵到指定元素ActionChains類方法列表活動四模擬鼠標操作任務三SeleniumWebDriver的高級應用時間等待主要用于以下兩種情況:

測試過程中,我們發(fā)現(xiàn)腳本執(zhí)行的時候、展現(xiàn)出來的效果很快結(jié)束了,中間的運行過程沒有看清楚。為了觀察執(zhí)行效果我們會在需要停頓的位置增加一個等待時間。這種等待時間我們只是為了我們便于觀察,這種情況下是否包含等待時間不會影響我們的執(zhí)行結(jié)果。在我們打開一個網(wǎng)站的時候,由于環(huán)境的因素導致頁面沒有下載完成時去定位元素,此時無法找到元素,這個時候會影響到我們的執(zhí)行結(jié)果。這個時候我們增加一個等待時間,等待指定元素被加載出來之后,我們才去定位該元素,就不會出現(xiàn)定位失敗的現(xiàn)象了。活動一設(shè)置時間等待一、強制等待

針對上述第一種情況的時間等待,一般使用強制等待方法sleep()來實現(xiàn)。sleep()方法是由Python的time模塊提供的,所以使用時需要先做導入。導入代碼如下: fromtimeimportsleep

使用格式: sleep(seconds)

參數(shù)seconds表示程序的休眠時間,即強制等待時間,以秒為單位。

當然time.sleep方法也可以用在第二種情況下。但是有個明顯的缺點是我們無法預知到底設(shè)置幾秒的等待時間才能確保要定位的元素能夠加載到頁面上,時間短了、元素可能還是沒有出現(xiàn),時間長了會導致執(zhí)行效率下降。所以針對第二種情況使用time.sleep不是最佳選擇。

針對第二種情況,WebDriver提供了兩種類型的等待,分別稱作隱式等待和顯式等待?;顒右辉O(shè)置時間等待二、隱式等待隱式等待,也叫智能等待,是Selenium提供的一個超時等待。所謂隱式等待,就是我們設(shè)置了一個等待時間范圍,這個等待的時間是不固定的,最長的等待時間也莫過于我們設(shè)置的最大值。

在腳本中,可以使用隱式等待去等待一個元素被發(fā)現(xiàn)或一個命令完成。如果超出了設(shè)置的時間則會拋出異常。活動一設(shè)置時間等待隱式等待方法:

implicitly_wait(n)n是等待的秒數(shù),即最長等待時間,默認值為0。例:fromseleniumimportwebdriver#導入NoSuchElementException異常類

frommon.exceptionsimportNoSuchElementException

fromtimeimportctime

driver=webdriver.Chrome()活動一設(shè)置時間等待#設(shè)置隱式等待10秒

driver.implicitly_wait(10)

driver.get(“”)

try:

print(ctime())

driver.find_element_by_id(“kw”).send_keys(‘自動化測試')

exceptNoSuchElementExceptionase:

print(e)

finally:

print(ctime())活動一設(shè)置時間等待

說明:implicitly_wait()默認參數(shù)的單位為秒,本例中設(shè)置等待時長為10秒。首先,這10秒并非一個固定的等待時間,它并不影響腳本的執(zhí)行速度。其次,它并不針對頁面上的某一元素進行等待。當腳本執(zhí)行到某個元素定位時,如果元素可以定位,則繼續(xù)執(zhí)行;如果元素定位不到,則它將以輪詢的方式不斷地判斷元素是否被定位到。假設(shè)在第六秒定位到了元素則繼續(xù)執(zhí)行,若直到超出設(shè)置時長(10秒)還沒有定位到元素,則拋出異常。

思考:

將find_element_by_id(“kw”)中的“kw”

改成“kw11”,再執(zhí)行會怎樣?活動一設(shè)置時間等待三、顯式等待

在Selenium中,顯示等待由WebDriverWait類實現(xiàn)。

WebDriverWait類工作原理:

在設(shè)置時間內(nèi),默認每隔一段時間檢測一次指定的條件是否成立,如果條件成立,可以立即執(zhí)行后續(xù)的代碼,不必等到設(shè)置時間結(jié)束;反之,如果超過設(shè)置時間檢測不成立則拋出異常。格式:WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

各參數(shù)含義:driver

:瀏覽器驅(qū)動timeout

:最長等待時間,默認以秒為單位poll_frequency

:檢測的間隔時間,默認為0.5s

ignored_exceptions

:超時后的異常信息,默認情況下拋出NoSuchElementException?;顒右辉O(shè)置時間等待WebDriverWait()一般和until()或until_not()方法配合使用。until方法格式:until(method,message=‘’)作用:調(diào)用method,直到返回值不為False或不為空。

參數(shù)含義:method:需要執(zhí)行的方法。message:拋出異常時的文案,默認返回TimeoutException,表示超時。until_not方法格式:until_not(method,message=‘’)作用:

調(diào)用method,直到返回值為False或為空。

WebDriverWait()和until的配合使用:WebDriverWait(瀏覽器實例,超時時長,調(diào)用頻率,異常信息).until(要調(diào)用的方法,超時時返回的信息)

活動一設(shè)置時間等待示例:在百度頁面的輸入框中輸入“selenium”,要求:為定位輸入框操作添加顯式等待,等待時間5秒,定位操作的執(zhí)行間隔設(shè)為0.5秒。腳本:fromseleniumimportwebdriver

fromtimeimportctime#導入顯示等待類

fromselenium.webdriver.support.uiimportWebDriverWaitfrommon.byimportBy

fromselenium.webdriver.supportimportexpected_conditionsasEC

driver=webdriver.Chrome()

driver.get("")

print(ctime())活動一設(shè)置時間等待try:#設(shè)置顯式等待5秒,檢測間隔時間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)點presence_of_element_located()方法用于判斷元素是否已被加載,返回值為布爾類型。方法的第一個參數(shù)是定位的類型,由By提供;第二個參數(shù)是對應的屬性值。

在使用By之前需要將By類導入:frommon.byimportBy活動一設(shè)置時間等待在操作頁面時,我們點擊某個鏈接,會彈出新的窗口。有時候我們又想要切換到原來的窗口上進行操作。怎樣才能切換到原來的窗口呢?

Selenium提供了切換窗口的方法:

switch_to.window()活動二切換窗口

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論