軟件測試項目實戰(zhàn)(第四版)課件 第六章:自動化測試 Selenium_第1頁
軟件測試項目實戰(zhàn)(第四版)課件 第六章:自動化測試 Selenium_第2頁
軟件測試項目實戰(zhàn)(第四版)課件 第六章:自動化測試 Selenium_第3頁
軟件測試項目實戰(zhàn)(第四版)課件 第六章:自動化測試 Selenium_第4頁
軟件測試項目實戰(zhàn)(第四版)課件 第六章:自動化測試 Selenium_第5頁
已閱讀5頁,還剩116頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

軟件測試項目實戰(zhàn)(第四版)第6章:自動化測試Selenium目錄CONTENTS6.1

知識儲備01020304添加標題

添加標題6.2Selenium簡介添加標題

添加標題6.3環(huán)境搭建添加標題

添加標題6.4Selenium入門添加標題

添加標題目錄CONTENTS6.5

Web元素定位05060708添加標題

添加標題6.6鼠標操作添加標題

添加標題6.7鍵盤操作添加標題

添加標題6.8Selenium3種等待方式添加標題

添加標題目錄CONTENTS6.9

Selenium

API-WebDriver屬性09101112添加標題

添加標題添加標題

添加標題添加標題

添加標題6.12SeleniumAPI-WebE方法添加標題

添加標題6.10

Selenium

API-WebDriver方法6.11

Selenium

API-WebElement屬性目錄CONTENTS6.13UnitTest單元測試13141516添加標題

添加標題添加標題

添加標題添加標題

添加標題6.16下拉框的處理添加標題

添加標題6.14HTMLTestRunner6.15submit()方法使用目錄CONTENTS6.17頁面操作17181920添加標題

添加標題添加標題

添加標題添加標題

添加標題6.20數(shù)據(jù)斷言添加標題

添加標題6.18alert彈出框處理6.19數(shù)據(jù)驅動Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.1知識儲備第6章自動化測試Seleniun自動化測試,顧名思義,利用一些工具或變成語言,通過錄制或編程的方法,設定特定的測試場景,模擬用戶業(yè)務使用流程,自動尋找缺陷。目前業(yè)內較為流行的商用自動化測試工具代表有HP公司的UnifiedFunctionTesting與IBM公司的RFT,開源自動化測試工具則以Selenium、Jmeter、Appium為代表。UnifiedFunctionTesting,簡稱UFT,HP公司研發(fā)的自動化測試工具。提供符合所有主要應用軟件環(huán)境的功能測試和回歸測試的自動化。采用關鍵字驅動的理念簡化測試用例創(chuàng)建和維護。用戶可直接錄制屏幕上的操作流程,自動生成功能測試或者回歸測試用例。專業(yè)的測試者也可以通過提供的內置VBScript腳本和調試環(huán)境來自定義腳本執(zhí)行過程。IBMRationalFUnctionalTester,簡稱RFT,是一款先進的、自動化的功能和回歸測試工具,適用于測試工程師和GUI開發(fā)工程師。測試新手可以簡化復雜的測試任務,很快上手,測試專家能夠通過選擇工業(yè)標準化的腳本語言,實現(xiàn)各種高級定制功能。Selenium,業(yè)內流行的開源Web自動化測試工具,直接運行在瀏覽器中,就像真正的用戶在操作一樣,支持的瀏覽器包括IE、Firefox、Chrome等。自動化測試優(yōu)點是能夠快速回歸、腳本重用,從而替代人的重復活動?;貧w測試階段,可利用自動化測試工具進行,無需大量測試工程師手動執(zhí)行測試用例,極大的提高了工作效率。當然,自動化測試的缺點也很明顯,它們只能檢查一些比較主要的問題,如崩潰、司機,但是卻無法發(fā)現(xiàn)新的錯誤。另外,自動測試編寫測試腳本工作量也很大,有時候該工作量甚至超過了手動測試的時間。自動化測試不僅僅運用在系統(tǒng)測試層面,在單元測試、集成測試階段同樣可以使用自動化測試方法進行測試。此章節(jié)所述自動化主要是指UI層面的自動化。自動化測試在企業(yè)中基本是由專業(yè)的團隊來實施的,自動化測試測試團隊成員的技能要求要比普通的手工測試工程師一般要求要高,主要技能如下:基本軟件測試基本理論、設計方法、測試方法,熟悉軟件測試流程;熟悉相關編程語言。具體語言與工具有關,如UFT需要掌握VBScript,Selenium需要掌握JAVA或Python語言;掌握一個比較流行的自動化測試工具,雖然掌握一個自動化工具不是必須的,但是初學者建議還是從一個工具開始入手;熟悉被測對象的架構模型,了解數(shù)據(jù)庫、接口、網(wǎng)絡協(xié)議等方面的知識;熟悉一些常見的自動化測試框架,比如數(shù)據(jù)驅動、關鍵字驅動。敏捷開發(fā)團隊中要求測試工程師必須具備上述技能要求。第6章自動化測試SeleniunClickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.2Selenium簡介一、簡介Selenium是一個Web應用的自動化框架。主要應用于Web應用程序的自動化測試。通過它,測試工程師可以寫出自動化程序,模擬人在瀏覽器里操作Web界面。比如點擊界面按鈕,在文本框中輸入文字等操作。

除此以外,它還支持所有基于Web的管理任務自動化。二、Selenium的特點1.開源免費:基于這點,能夠吸引大部分公司愿意使用它來作為自動化測試的框架2.多瀏覽器支持:支持Chrome、Firefox、IE、Edge、Safari等瀏覽器3.多平臺支持:支持Linux、Windows、Mac系統(tǒng)平臺4.多語言支持:支持Java、Python、Ruby、JavaScript、C++等開發(fā)語言6.對Web頁面有良好的支持6.簡單、靈活:使用時調用的API簡單,只需要使用開發(fā)語言導入調用即可7.支持分布式測試:使用SeleniumGrid8.支持錄制、回放與腳本生成:使用SeleniumIDE三、Selenium的歷史版本Selenium經(jīng)歷了3個版本,Selenium1.X、Selenium2.X以及目前的Selenium3.X。其中Selenium1.X與Selenium2.X最大的區(qū)別在于WebDriver。WebDriver曾經(jīng)是Selenium的競爭對手,能彌補Selenium1.X存在的不足。而Selenium2.X則是Selenium與WebDriver兩個項目的合并,也就是說,Selenium2.X=Selenium1.X+WebDriver。直到現(xiàn)在,使用最為廣泛的是Selenium3.X,它最大的變化在于:去掉了SeleniumRCremoteserver,第6章自動化測試SeleniunFirefox瀏覽器擁有了獨立的驅動——geckodriverEdge瀏覽器與Safari瀏覽器原生驅動的支持Selenium的工作原理,如圖5-1所示。seleniumclient(Java等語言編寫的自動化測試腳本)初始化一個service服務,通過Webdriver啟動瀏覽器驅動程序通過RemoteWebDriver向瀏覽器驅動程序發(fā)送HTTP請求,瀏覽器驅動程序解析請求,打開瀏覽器,并獲得sessionid,如果再次對瀏覽器操作需攜帶此id打開瀏覽器,綁定特定的端口,把啟動后的瀏覽器作為webdriver的remoteserver打開瀏覽器后,所有的selenium的操作(訪問地址,查找元素等)均通過RemoteConnection鏈接到remoteserver,然后使用execute方法調用_request方法通過urlib3向remoteserver發(fā)送請求瀏覽器通過請求的內容執(zhí)行對應動作瀏覽器再把執(zhí)行的動作結果通過瀏覽器驅動程序返回給測試腳本第6章自動化測試Seleniun自動化腳本需要調用客戶端庫,在Python環(huán)境中安裝Selenium庫非常簡單,使用pipinstallselenium即可。腳本程序的自動化請求,都是通過客戶端庫里的API發(fā)送給瀏覽器驅動--WebDriver。再由WebDriver來實際執(zhí)行瀏覽器的操作。比如,模擬用戶點擊界面按鈕,自動化腳本作為客戶端,調用客戶端庫內click()的方法,將點擊元素的請求給到指定的瀏覽器驅動WebDriver,再由WebDriver將這個請求轉發(fā)給瀏覽器。第6章自動化測試SeleniunClickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.3環(huán)境搭建一、安裝Python(1)雙擊下載的exe安裝文件進行安裝,如圖1-1所示。按照圈中區(qū)域進行設置,切記要勾選打鉤的框,如果不進行勾選,需要自己配置環(huán)境變量,勾選了后自動配置環(huán)境變量。然后再點擊Customizeinstallation(自定義安裝)進入到下一步。圖5-2安裝Python第6章自動化測試Seleniun(2)點擊自定義安裝后彈出如圖5-3所示的安裝界面,將所有的復選框進行勾選,點擊Next。圖5-3安選項界面第6章自動化測試Seleniun(3)彈出新的安裝界面,如圖5-4所示。界面中只勾選圖中顯示的復選框即可,我們可以通過Browse進行自定義安裝路徑,也可以直接點擊Install進行安裝,點擊Install后便可以完成安裝了。圖5-4更改安裝路徑第6章自動化測試Seleniun(4)安裝完成后為了檢查我們的Python是否安裝成功,可以在cmd命令窗口中輸入Python進行查詢,出現(xiàn)如圖5-5所示的信息則表示成功了。圖5-5Python命令二、安裝Selenium方法1:將下載好的文件進行解壓,然后放置在Python安裝目錄下的\Lib\site-packages中方可使用。方法2:使用cmd命令進行在線安裝Selenium,如圖5-6所示。命令:pipinstallselenium==版本號說明:如果命令后面不加版本號,默認下載最新的版本圖5-6下載Selenium命令第6章自動化測試Seleniun安裝完成后如下命令檢查是否安裝成功。如圖5-7示。命令:pipshowselenium圖5-7檢查是否安裝成功第6章自動化測試Seleniun三、安裝PyCharm(1)雙擊PyCharm安裝包,彈出如圖5-8所示,之后點擊Next。圖5-8安裝PyCharm第6章自動化測試Seleniun(2)選擇安裝路徑(也可以使用默認路徑),選擇完成后,點擊Next,如圖5-9所示。圖5-9選擇安裝路徑第6章自動化測試Seleniun(3)選擇相對應的系統(tǒng)和文件后綴名,之后點擊Next,如圖5-10示。圖5-10選擇相對應的系統(tǒng)和文件后綴名第6章自動化測試Seleniun(4)在開始安裝界面點擊Install,進行安裝,如圖5-11所示。圖5-11開始安裝界面第6章自動化測試Seleniun(5)安裝成功之后勾選復選框,點擊Finish,表示安裝完成并運行PyCharm。如圖5-12所示。圖5-12安裝完成并運行PyCharm第6章自動化測試Seleniun四、安裝瀏覽器以及相關驅動安裝谷歌瀏覽器,并將谷歌瀏覽器驅動放置在python安裝文件的根目錄下,如圖5-13所示。圖5-13第6章自動化測試SeleniunClickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.4Selenium入門目前市面上主流的瀏覽器有Chrome、IE及Firefox等,本書使用Chrome作為測試瀏覽器。在學習如何使用Selenium開展Web自動化測試前,先熟悉下Selenium應用的基礎知識。一、第一個腳本fromtimeimportsleep

#從Selenium中引入WebDriver

fromseleniumimportwebdriver

#打開谷歌瀏覽器

driver=webdriver.Chrome()

#窗口最大化

driver.maximize_window()

#強制等待3秒

sleep(3)

#退出瀏覽器

driver.quit()二、瀏覽器常用操作設置大小如果打開的窗口不是全屏,或者需要設為特定的大小,則可以使用maximize_window()和setwindow_size()進行調整#設置全屏

第6章自動化測試Seleniundriver.maximize_window()

#設置固定分辨率大小

driver.set_window_size(800,600)強制睡眠強制睡眠即強制等待,執(zhí)行到該腳本時會等待幾秒再繼續(xù)執(zhí)行腳本強制等待需要先引入time下的sleep方法fromtimeimportsleep

sleep(3)頁面截屏測試執(zhí)行過程中發(fā)現(xiàn)缺陷,需要截屏時,可利用get_screenshot_as_file()方法進行截屏,如:driver.get_screenshot_as_file("d"\\test.jpg")需要注意的是,此方法截屏是整個對象界面,而不是單獨某個區(qū)域。關閉窗口關閉窗口有兩種方法:close、quit,當對象操作完成需要關閉窗口時,可使用close和quit。二者的區(qū)別是:Close:關閉當前窗口,可用于某個具體窗口關閉。driver.close()Quit:關閉所有與當前操作有關聯(lián)的窗口,并退出驅動。需要釋放資源時可使用此方法。driver.quit()第6章自動化測試SeleniunClickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.5Web元素定位-id定位對于Web頁面,id是最理想的定位方式,一般前端HTML代碼都會盡量保證id的唯一性。第6章自動化測試Seleniun一、find_element_by_id應用#find_element_by_id定位百度輸入框

fromseleniumimportwebdriver#導入webdriver模塊

fromtimeimportsleep#導入sleep模塊,可以使程序強制休眠

driver=webdriver.Chrome()#打開Chrome瀏覽器

driver.get('')#打開百度網(wǎng)站

kw_element=driver.find_element_by_id("kw")#通過id屬性定位到輸入框

kw_element.send_keys("selenium")#向輸入框輸入"selenium"

sleep(3)#強制休眠3秒

driver.quit()#關閉瀏覽器

#find_element_by_id定位bing的搜索輸入框

driver=webdriver.Chrome()#打開Chrome瀏覽器

driver.get('/')#打開bing

search_element=driver.find_element_by_id("sb_form_q")#通過id屬性定位到搜索輸入框search_element.send_keys("自動化測試")#輸入內容

sleep(3)#強制休眠3秒driver.quit()#關閉瀏覽器第6章自動化測試SeleniunClickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.5Web元素定位-name定位第6章自動化測試Seleniun通過HTML代碼中的name屬性來定位元素。name屬性的值有可能不是唯一的,這時,會找到多個元素,遇到此類情況,程序會優(yōu)先選擇第一個定位元素。第6章自動化測試Seleniun一、find_element_by_name應用#find_element_by_name定位百度輸入框

fromseleniumimportwebdriver#導入webdriver模塊

fromtimeimportsleep#導入sleep模塊,可以使程序強制休眠

driver=webdriver.Chrome()#調用Chrome瀏覽器

driver.get('')#打開百度網(wǎng)站

kw_element=driver.find_element_by_name("wd")#通過name屬性定位輸入框

kw_element.send_keys("selenium")#向輸入框輸入"selenium"

sleep(3)#強制休眠3秒

driver.quit()#關閉瀏覽器

#find_element_by_name定位bing搜索輸入框

driver=webdriver.Chrome()#調用Chrome瀏覽器

driver.get('/')#打開bing

driver.find_element_by_name("q").send_keys("python")#通過name屬性定位必應搜索輸入框,輸入“python”

sleep(3)#強制休眠3秒

driver.quit()#關閉瀏覽器Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.5Web元素定位-name定位第6章自動化測試Seleniun通過HTML代碼中的class屬性來定位元素。第6章自動化測試Seleniun一般不建議使用此定位方式:class屬性一般是不唯一的class屬性存在復合類:以下這段class屬性就是一個復合類,每個類用空格分隔,如果通過全匹配定位,程序會報錯第6章自動化測試Seleniun#以下程序會報錯

driver=webdriver.Chrome()#調用Chrome瀏覽器

driver.get('')#打開百度網(wǎng)站

kw_element=driver.find_element_by_class_name("btnself-btnbgs_btn")#通過class屬性定位搜索按鈕

kw_element.click()#點擊搜索按鈕

sleep(5)#強制休眠5秒

driver.quit()#關閉瀏覽器

#報錯信息

#mon.exceptions.NoSuchElementException:

#Message:nosuchelement:Unabletolocateelement:

#{"method":"cssselector","selector":".btnself-btnbgs_btn"}一、find_element_by_class_name應用#find_element_by_class_name定位百度輸入框

fromseleniumimportwebdriver#導入webdriver模塊

fromtimeimportsleep#導入sleep模塊,可以使程序強制休眠

第6章自動化測試Seleniundriver=webdriver.Chrome()#調用Chrome瀏覽器

driver.get('')#打開百度網(wǎng)站

kw_element=driver.find_element_by_class_name("s_ipt")#通過class屬性定位輸入框

kw_element.send_keys("selenium")#向輸入框寫入"selenium"

sleep(3)#強制休眠3秒

driver.quit()#關閉瀏覽器

#find_element_by_class_name定位bing搜索輸入框

driver=webdriver.Chrome()#調用Chrome瀏覽器

driver.get('/')#打開bing

search_element=driver.find_element_by_class_name("sb_form_q")#通過class屬性定位到搜索輸入框

search_element.send_keys("自動化測試")#輸入內容

sleep(3)#強制休眠3秒

driver.quit()#關閉瀏覽器Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.5Web元素定位-link_text定位第6章自動化測試Seleniun此定位方法只針對HTML中的<a>內容</a>標簽使用,一般會對應一個可跳轉的鏈接,通過a標簽中的內容定位元素。第6章自動化測試Seleniun一、find_element_by_link_text應用#find_element_by_link_text點擊“hao123”,跳轉值hao123頁面

fromseleniumimportwebdriver#導入webdriver模塊

fromtimeimportsleep#導入sleep模塊,可以使程序強制休眠

driver=webdriver.Chrome()#調用Chrome瀏覽器

driver.get('')#打開百度網(wǎng)站

element=driver.find_element_by_link_text("hao123")#通過link_text定位

element.click()#點擊

sleep(5)#強制休眠5秒

driver.quit()#關閉瀏覽器

#find_element_by_link_text點擊豆瓣首頁的“豆瓣同城”

driver=webdriver.Chrome()#調用Chrome瀏覽器

driver.get('/')#打開豆瓣

element1=driver.find_element_by_link_text("豆瓣同城")#通過link_text定位

element1.click()#點擊

sleep(5)#強制休眠5秒

driver.quit()#關閉瀏覽器Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.5Web元素定位-partial_link_text定位第6章自動化測試Seleniun同樣也是針對HTML中的<a>內容</a>標簽使用,與find_element_by_link_text的區(qū)別就是,它支持部分文字匹配,但必須是連續(xù)的文字,不能是間隔的文字。一、find_element_by_partial_link_text應用#find_element_by_partial_link_text點擊“hao123”,跳轉值hao123頁面

fromseleniumimportwebdriver#導入webdriver模塊

fromtimeimportsleep#導入sleep模塊,可以使程序強制休眠

driver=webdriver.Chrome()#調用Chrome瀏覽器

driver.get('')#打開百度網(wǎng)站

element=driver.find_element_by_partial_link_text("hao1")#通過partial_link_text定位,匹配開頭

#element=driver.find_element_by_partial_link_text("ao123")#通過partial_link_text定位,匹配結尾

#element=driver.find_element_by_partial_link_text("ao12")#通過partial_link_text定位,匹配中間

element.click()#點擊

sleep(5)#強制休眠5秒

第6章自動化測試Seleniun#find_element_by_partial_link_text點擊豆瓣首頁的“豆瓣同城”

driver=webdriver.Chrome()#調用Chrome瀏覽器

driver.get('/')#打開豆瓣

element1=driver.find_element_by_partial_link_text("豆瓣同")#通過partial_link_text定位,匹配開頭

#element1=driver.find_element_by_partial_link_text("瓣同城")#通過partial_link_text定位,匹配結尾

#element1=driver.find_element_by_partial_link_text("瓣同")#通過partial_link_text定位,匹配中間

element1.click()#點擊

sleep(5)#強制休眠5秒Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.5Web元素定位-css_selector定位第6章自動化測試Seleniun關于頁面元素定位,可以根據(jù)

id、class、name屬性以及l(fā)ink_text。其中id屬性是最理想的定位方式,class與name屬性,有時候也還行。但是,如果要定位的元素,沒有上述的屬性,或者通過上述屬性找到多個元素,該怎么辦?Selenium提供了2種可以唯一定位的方式:find_element_by_css_selectorfind_element_by_xpath一、find_element_by_css_selector

應用原理HTML中經(jīng)常要為頁面上的元素指定顯示效果,比如前景文字顏色是紅色,背景顏色是黑色,字體是微軟雅黑,輸入框的寬與高等。以上這一切,都是靠css

來告訴瀏覽器:要選擇哪些元素,顯示怎樣的風格。如下圖,豆瓣上“登陸豆瓣”的按鈕,就是css

告訴瀏覽器:.account-anonymous.account-form-field-submit.btn

這個按鈕,背景顏色是淺綠色,高

是34px等第6章自動化測試Seleniun其中,.account-anonymous.account-form-field-submit.btn就是cssselector,也稱為css選擇器。cssselector語法就是用來選擇元素的。既然cssselector語法天生就是瀏覽器用來選擇元素的,Selenium自然就可以將它運用到自動化中,來定位要操作的元素了。只要cssselector的語法是正確的,Selenium就可以定位到指定的元素。我們可以通過Chrome瀏覽器直接復制css_selector:鼠標放到要選擇的元素位置,右鍵選擇檢查第6章自動化測試Seleniun右鍵有藍色陰影的代碼,選擇Copy,選擇Copyselectorfromseleniumimportwebdriver

driver=webdriver.Chrome()

driver.get("")

#根據(jù)id定位輸入框并輸入“python”

driver.find_element_by_id("kw").send_keys("python")

#根據(jù)css定位百度一下的按鈕,并點擊

driver.find_element_by_css_selector("#su").click()Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.5Web元素定位-xpath定位第6章自動化測試SeleniunSelenium提供的另一種,能夠唯一定位的方式:find_element_by_xpathXPath基礎知識XPath(XMLPathLanguage)是由國際標準化組織W3C指定的,用來在XML和HTML文檔中選擇節(jié)點的語言。目前主流瀏覽器(Chrome,F(xiàn)irefox,Edge,Safari)都支持XPath語法。一、find_element_by_xpath應用我們可以通過Chrome瀏覽器直接復制xpath:鼠標放到要選擇的元素位置,右鍵選擇檢查第6章自動化測試Seleniun右鍵有藍色陰影的代碼,選擇Copy,選擇CopyXPathfromseleniumimportwebdriver

driver=webdriver.Chrome()

driver.get("")

#根據(jù)id定位輸入框并輸入“python”

driver.find_element_by_id("kw").send_keys("python")

#根據(jù)xpath定位百度一下的按鈕,并點擊

driver.find_element_by_xpath('//*[@id="su"]').click()Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.5Web元素定位-tag_name定位第6章自動化測試Seleniuntag_name就是標簽名,這種方法就是通過標簽名進行定位fromseleniumimportwebdriver一、find_element_by_tag_name應用driver=webdriver.Chrome()

driver.get("/")

#根據(jù)tag_name定位輸入框并輸入“python”

driver.find_element_by_tag_name("input").send_keys("python")第6章自動化測試Seleniun二、find_elements_by_tag_name復數(shù)應用有的頁面的標簽經(jīng)常是重復的,我們需要精準的定位,因此用到復數(shù),方法如下:fromseleniumimportwebdriverdriver=webdriver.Chrome()

driver.get("/")

#根據(jù)tag_name定位輸入框并輸入“python”[]內從0開始,代表該頁面的第幾個標簽,[0]就是第一個input標簽

driver.find_elements_by_tag_name("input")[0].send_keys("python")Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.6鼠標操作第6章自動化測試SeleniunSelenium針對鼠標操作,如鼠標的單機、雙擊、右鍵、拖拽等操作,封裝了ActionChains類,模擬鼠標操作時,需事先導入ActionChains類。#導入ActionChains類

frommon.action_chainsimportActionChains

#單擊鼠標左鍵

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)

#鼠標從當前位置移動到某個坐標

move_by_offset(xoffset,yoffset)

#鼠標移動到某個元素

move_to_element(to_element)

#移動到距某個元素(左上角坐標)多少距離的位置

move_to_element_with_offset(to_element,xoffset,yoffset)

#執(zhí)行鏈中的所有動作

perform()

#在某個元素位置松開鼠標左鍵

release(on_element=None)Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.7鍵盤操作第6章自動化測試SeleniunSelenium針對鍵盤操作,如鍵盤輸入、回車、回退、空格、CTRL等操作,封裝了Keys類,模擬鍵盤操作時,需事先導入Keys類。#導入Keys類

frommon.keysimportKeys

#按下某個鍵盤上的鍵

key_down(value,element=None)

#松開某個鍵

key_up(value,element=None)

#發(fā)送某個鍵到當前焦點的元素

send_keys(*keys_to_send)

#發(fā)送某個鍵到指定元素

send_keys_to_element(element,*keys_to_send)Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.8Selenium3種等待方式第6章自動化測試Seleniun加入等待時間,主要是考慮到網(wǎng)頁加載需要時間,可能由于網(wǎng)速慢,或者使用了ajax技術實現(xiàn)了異步加載等,如果程序找不到指定的頁面元素,就會導致報錯發(fā)生。常用的有3種等待方式:6.8.1強制等待使用Python自身的庫time.sleep()可以實現(xiàn)強制等待。強制等待使用簡單,但是,當網(wǎng)絡條件良好的時候,建議減少使用,因為如果頻繁使用強制等待的方式等待元素加載,會導致整個項目的自動化時間延長。這種等待方式的使用場景主要是腳本調試。6.8.2隱式等待隱式等待實際上是,設置了一個最長的等待時間,如果在這段時間內能夠定位到目標,則執(zhí)行下一步操作,否則會一致等到規(guī)定時間結束,然后再執(zhí)行下一步。隱式等待設置一次,對整個driver周期都能夠起作用,所以,在最開始設置一次即可。注意:在同一個driver周期中遇到強制等待,可能會導致隱式等待失效#隱式等待,京東的“新人福利”

fromseleniumimportwebdriver

fromtimeimportsleep

driver=webdriver.Chrome()#打開瀏覽器

driver.maximize_window()#瀏覽器最大化

driver.get("/")#跳轉至京東

driver.implicitly_wait(10)#隱式等待10s

element=driver.find_element_by_xpath("http://*[@class='user_profit_lk']")#定位元素

element.click()#點擊

sleep(3)

driver.quit()#關閉瀏覽器第6章自動化測試SeleniunWebDriverWait是Selenium提供的顯式等待的模塊,使用原理是:在指定的時間范圍內,等待到符合/不符合某個條件為止。導入方式:Formselenium.webdeiver.waitimportWebDriverWaitWebDriverWait參數(shù):序號參數(shù)描述1driver傳入的WebDriverWait實例2timeout超時時間,等待的最長時間3poll_frequency調用until或until_not中的方法的間隔時間(默認是0.5秒)4ignored_exceptions忽略的異常第6章自動化測試SeleniunWebDriverWait模塊含有兩個方法:untiluntil_notuntil與until_not的參數(shù):序號參數(shù)描述1method在等待期間,每隔一段時間調用這個傳入的方法,直到返回值不為False2message如果超時,拋出TimeoutException,將message傳入異常第6章自動化測試Seleniun通常情況下,WebDriverWait模塊會與expected_conditions模塊搭配使用,用來寫入until與until_not中的參數(shù)——method。expected_conditions模塊有以下等待條件序號等待條件方法描述1title_is(object)判斷標題,是否出現(xiàn)2title_contains(object)判斷標題,是否包含某些字符3presence_of_element_located(object)--常用判斷某個元素,是否被加到了dom樹里,并不代表該元素一定可見4visibility_of_element_located(object)--常用判斷某個元素,是否被加到了dom樹里,并且可見,寬和高都大于05visibility_of(object)判斷元素是否可見,如果可見則返回這個元素6presence_of_all_elements_located(object)判斷是否至少有1個元素存在dom樹中7visibility_of_any_elements_located(object)判斷是否至少有1個元素在頁面中可見8text_to_be_present_in_element(object)判斷指定的元素中是否包含了預期的字符串9text_to_be_present_in_element_value(object)判斷指定元素的屬性值是否包含了預期的字符串10frame_to_be_available_and_switch_to_it(object)判斷該frame是否可以切換進去11invisibility_of_element_located(object)判斷某個元素是否存在與dom樹中或不可見12element_to_be_clickable(object)判斷某個元素中是否可見,并且是可點擊的13staleness_of(object)等待某個元素從dom樹中刪除14element_to_be_selected(object)判斷某個元素是否被選中,一般用在下拉列表中15element_selection_state_to_be(object)判斷某個元素的選中狀態(tài)是否符合預期16element_located_selection_state_to_be(object)判斷某個元素的選中狀態(tài)是否符合預期17alert_is_present(object)判斷頁面上是否出現(xiàn)alert彈窗第6章自動化測試Seleniun#模擬場景:點擊京東首頁的“新人福利”

fromseleniumimportwebdriver

fromtimeimportsleep

frommon.byimportBy

fromselenium.webdriver.support.waitimportWebDriverWait

fromselenium.webdriver.supportimportexpected_conditionsasECdriver=webdriver.Chrome()#打開瀏覽器

driver.maximize_window()#瀏覽器最大化

driver.get("/")#跳轉至京東

element=WebDriverWait(driver,20,0.5).until(

EC.visibility_of_element_located((By.XPATH,"http://*[@class='user_profit_lk']"))

)#20秒內,直到元素在頁面中可定位element.click()#點擊

sleep(3)driver.quit()顯式等待,雖然使用起來,相比其他等待方式,顯得要復雜,但是它的優(yōu)勢在于靈活,通過封裝后,通過簡單的調用,就可以運用到自動化測試項目中。Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.9SeleniumAPI-WebDriver屬性第6章自動化測試Seleniun打開瀏覽器,能夠定位的內容都在HTML代碼段內的<body>頁面內容</body>中,對于瀏覽器上的當前頁面標題,url等,都是無法通過元素定位來操作的。序號方法/屬性描述1driver.title獲取當前頁面的標題2driver.current_url獲取當前頁面的鏈接地址3獲取瀏覽器名稱4driver.page_source獲取當前頁面源碼5driver.current_window_handle獲取當前窗口句柄6driver.window_handles獲取當前窗口所有句柄driver.title獲取當前頁面的標題:fromseleniumimportwebdriver

driver=webdriver.Chrome()#打開瀏覽器

driver.get("/")#跳轉至百度

title=driver.title#將當前頁面的標題賦值給title

print("當前網(wǎng)頁標題是:{}".format(title))#當前網(wǎng)頁標題是:百度一下,你就知道

driver.quit()#關閉瀏覽器driver.current_url第6章自動化測試Seleniun獲取當前頁面的鏈接地址(url):fromseleniumimportwebdriver

driver=webdriver.Chrome()#打開瀏覽器

driver.get("/")#跳轉至百度

url=driver.current_url#將當前頁面的url賦值給title

print("當前網(wǎng)頁url是:{}".format(url))#當前網(wǎng)頁url是:/

driver.quit()#關閉瀏覽器獲取瀏覽器名稱:fromseleniumimportwebdriver

fromtimeimportsleep

driver=webdriver.Chrome()#打開瀏覽器

driver.maximize_window()#瀏覽器最大化

driver.get("/")#跳轉至百度新聞

sleep(1)

name=#獲取瀏覽器名

print(name)#chrome

sleep(2)

driver.quit()#關閉瀏覽器driver.page_source第6章自動化測試Seleniun獲取當前頁面源碼:fromseleniumimportwebdriver

fromtimeimportsleep

driver=webdriver.Chrome()#打開瀏覽器

driver.maximize_window()#瀏覽器最大化

driver.get("/")#跳轉至百度新聞

sleep(1)

source_code=driver.page_source#獲取當前頁面源碼

print(source_code)#打印頁面源碼

sleep(2)

driver.quit()#關閉瀏覽器driver.current_window_handle獲取當前窗口句柄:fromseleniumimportwebdriver

fromtimeimportsleep

driver=webdriver.Chrome()#打開瀏覽器

driver.maximize_window()#瀏覽器最大化

driver.get("/")#跳轉至百度新聞

sleep(1)

window=driver.current_window_handle#獲取當前窗口句柄

print(window)#CDwindow-D66055B46A1AB87EB271834BB9EA96C7

sleep(2)

driver.quit()#關閉瀏覽器driver.window_handles第6章自動化測試Seleniun獲取當前窗口所有句柄:fromseleniumimportwebdriver

fromtimeimportsleep

driver=webdriver.Chrome()#打開瀏覽器

driver.maximize_window()#瀏覽器最大化

driver.get("/")#跳轉至百度首頁

sleep(1)

driver.find_element_by_xpath("http://div[@id='s-top-left']/a[1]").click()

windows=driver.window_handles#獲取當前窗口所有句柄

print(windows)#['CDwindow-14E173D7301CC5C7A70930B3F7AB734D','CDwindow-3E3A9FC2536870107E4C9FF2DFAEA62E']

sleep(2)

driver.quit()#關閉瀏覽器Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.10SeleniumAPI-WebDriver方法第6章自動化測試Seleniun序號方法/屬性描述1driver.back()瀏覽器頁面后退2driver.forword()瀏覽器頁面前進3driver.refresh()刷新當前瀏覽器頁面4driver.maximize_window()使瀏覽器窗口最大化5driver.set_window_size()設置瀏覽器窗口為指定尺寸6driver.close()關閉當前窗口7driver.quit()退出瀏覽器關于常用的WebDriver方法,主要是回退、前進、刷新關閉瀏覽器等driver.back()瀏覽器頁面后退:fromseleniumimportwebdriver

fromtimeimportsleep

driver=webdriver.Chrome()#打開瀏覽器

driver.maximize_window()#瀏覽器最大化

driver.get("https://juejin.im/")#跳轉至掘金首頁

sleep(1)

driver.find_element_by_xpath("http://a[@href='/topics']").click()#跳轉至話題頁面

sleep(2)

driver.back()#瀏覽器頁面回退第6章自動化測試Seleniunsleep(2)

driver.quit()#關閉瀏覽器driver.forword()瀏覽器頁面前進:fromseleniumimportwebdriver

fromtimeimportsleep

driver=webdriver.Chrome()#打開瀏覽器

driver.maximize_window()#瀏覽器最大化

driver.get("https://juejin.im/")#跳轉至掘金首頁sleep(1)

driver.find_element_by_xpath("http://a[@href='/topics']").click()#跳轉至話題頁面

sleep(2)

driver.back()#瀏覽器頁面回退

sleep(2)

driver.forward()#瀏覽器頁面前進

sleep(2)

driver.quit()#關閉瀏覽器driver.refresh()刷新當前瀏覽器頁面:fromseleniumimportwebdriver

fromtimeimportsleep

driver=webdriver.Chrome()#打開瀏覽器

driver.maximize_window()#瀏覽器最大化

driver.get(“/”)#跳轉至百度新聞第6章自動化測試Seleniunsleep(1)

driver.refresh()

sleep(2)driver.quit()#關閉瀏覽器driver.maximize_window()使瀏覽器窗口最大化driver.set_window_size()設置瀏覽器窗口為指定尺寸:fromseleniumimportwebdriverfromtimeimportsleep

driver=webdriver.Chrome()#打開瀏覽器

driver.maximize_window()#瀏覽器最大化driver.get("/")#跳轉至百度新聞

sleep(1)driver.set_window_size(1000,600)#設置瀏覽器窗口的寬*高=1000*600

sleep(2)driver.quit()#關閉瀏覽器driver.close()此方法用于關閉當前窗口,如果瀏覽器打開了多個窗口,只會關閉當前的一個窗口,瀏覽器不會被關閉。driver.quit()此方法與driver.close()的區(qū)別在于,無論當前打開了多少個窗口,它會直接退出瀏覽器。Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.Clickheretoenteryourtext.6.11SeleniumAPI-Element方法第6章自動化測試Seleniun當我們使用Selenium的定位方法定位到元素之后,會返回一個WebElement對象(<class'selenium.webdriver.remote.webelement.WebElement'>),該對象用來描述Web頁面上的一個元素,那么,關于元素的常用屬性,主要有:序號方法/屬性描述1WebElement.id獲取元素的標示2WebElement.size獲取元素的寬與高,返回一個字典3WebElement.rect除了獲取元素的寬與高,還獲取元素的坐標4WebElement.tag_name獲取元素的標簽名稱5WebElement.text獲取元素的文本內容WebElement.id獲取元素的標示:fromseleniumimportwebdriverfromtimeimportsleep

driver=webdriver.Chrome()#打開瀏覽器

driver.maximize_window()#瀏覽器最大化driver.get("/")#跳轉至百度首頁

第6章自動化測試Seleniunsleep(1)element=driver.find_element_by_id("kw")#定位搜索輸入框

print(element.id)#25c961a3-4d39-4e67-b1f6-b72c89058a29

driver.quit()#關閉瀏覽器WebElement.size獲取元素的寬與高,返回一個字典類型數(shù)據(jù):fromseleniumimportwebdriver

fromtimeimportsleep

driver=webdriver.Chrome()#打開瀏覽器

driver.maximize_window()#瀏覽器最大化

driver.get("/")#跳轉至百度首頁sleep(1)

element=driver.find_element_by_id("kw")#定位搜索輸入框

print(element.size)#{'height':44,'width':548}driver.quit()#關閉瀏覽器WebElement.rect第6章自動化測試Seleniun獲取元素寬與高的同時,還獲取元素的坐標,同樣返回的是一個字典類型數(shù)據(jù):fromseleniumimportwebdriver

fromtimeimportsleep

driver=webdriver.Chrome()#打開瀏覽器

driver.maximize_window()#瀏覽器最大化

driver.get("/")#跳轉至百度首頁

sleep(1)

element=driver.find_element_by_id("kw")#定位搜索輸入框

print(element.rect)#{'height':44,'width':548,'x':633,'y':222.234375}driver.quit()#關閉瀏覽器WebElement.tag_name獲取元素的標簽名稱:fromseleniumimportwebdriver

fromtimeimportsleep

driver=webdriver.Chrome()#打開瀏覽器

driver.maximize_window()#瀏覽器最大化

driver.get("/")#跳轉至百度首頁

sleep(1)

element=driver.find_element_by_id("kw")#定位搜索輸入框

print(element.tag_name)#inputdriver.quit()#關閉瀏覽器WebElement.text

溫馨提示

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

評論

0/150

提交評論