Selenium+Python(元素定位)_第1頁
Selenium+Python(元素定位)_第2頁
Selenium+Python(元素定位)_第3頁
Selenium+Python(元素定位)_第4頁
Selenium+Python(元素定位)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、什么是selenium? selenium自動化測試工具,它主要是用于Web應(yīng)用程序的自動化測試,但肯定不只局限于此,同時支持所有基于web的管理任務(wù)自動化。selenium經(jīng)歷了兩個版本,selenium1.0和selenium2.0,selenium也不是簡單一個工具,而是由幾個工具組成,每個工具都有其特點和應(yīng)用場景。Selenium IDE:Selenium GridSelenium RCSelenium 2.0 Selenium RC 在瀏覽器中運(yùn)行JavaScript應(yīng)用,使用瀏覽器內(nèi)置的JavaScript翻譯器來翻譯和執(zhí)行selenese命令(selenese是selenium命

2、令集合)。 WebDriver通過原生瀏覽器或者瀏覽器擴(kuò)展直接控制瀏覽器。WebDriver針對各個瀏覽器而開發(fā),取代了嵌入到被測Web應(yīng)用中的JavaScript。與瀏覽器的緊密集成支持創(chuàng)建更高級的測試,避免了JavaScript安全模型導(dǎo)致的限制。除了來自瀏覽器廠商的支持,WebDriver還利用操作系統(tǒng)級的調(diào)用模擬用戶輸入。webdriver提供了一系列的元素定位方法,常用的有以下幾種: id,name,class name,tag name,link text,partial link text,xpath,css selector分別對應(yīng)Python Webdriver中的方法為:

3、find_element_by_link_text(新聞)find_element_by_partial_link_text(新) /局部模糊定位(關(guān)鍵字一定要唯一)Xpath定位用絕對路徑定位:find_element_by_xpath(/html/body/div2/form/span/input)當(dāng)我們所要定位的元素很難找到合適的方式時,都可以通過這種絕對路徑的方式定位,缺點是當(dāng)元素在很多級目錄下時,我們不得不要寫很長的路徑,而且這種方式難以閱讀和維護(hù)。相對路徑定位:find_element_by_xpath(/inputid = input ) #通過自身的id屬性定位find_ele

4、ment_by_xpath(/spanid= input-container /input) #通過上一級目錄的id屬性定位find_element_by_xpath(/divid= hd /form/span/input) #通過上三級目錄的id屬性定位find_element_by_xpath(/divname= q /form/span/input ) #通過上三級目錄的name屬性定位 通過上面的例子,我們可以看到XPath 的定位方式非常靈活和強(qiáng)大的,而且XPath 可以做布爾邏輯運(yùn)算,例如:/divid= hd or name= q 當(dāng)然,它的缺陷也非常明顯:1、性能差,定位元素的

5、性能要比其它大多數(shù)方式差;2、不夠健壯,XPath會隨著頁面元素布局的改變而改變;3. 兼容性不好,在不同的瀏覽器下對XPath 的實現(xiàn)是不一樣的。操作測試對象:Webdriver中比較常用的操作元素的方法有下面幾個: clear 清除元素的內(nèi)容 send_keys 在元素上模擬按鍵輸入 click 單擊元素 submit 提交表單submit()要求提交對象是一個表單,更強(qiáng)調(diào)對信息的提交。click()更強(qiáng)調(diào)事件的獨(dú)立性。(比如,一個文字鏈接就不能用submit()方法。)WebElement接口常用方法WebElement接口除了我們前面介紹的方法外,它還包含了別的一些有用的方法。下面,我

6、們例舉幾個比較有用的方法。 size (返回元素的尺寸。)例: #返回百度輸入框的寬高 size = driver.find_element_by_id(kw).size print size text (獲取元素的文本)例: #返回百度頁面底部備案信息 text = driver.find.element_by_id(cp).text print text get_attribute(name) (獲取屬性值)例: #返回元素的屬性值,可以是id、name、type或元素?fù)碛械钠渌我鈱傩?attribute = driver.find_element_by_id(kw).get_attri

7、bute( type ) print attribute (這個方法在定位一組數(shù)據(jù)時將變得非常有用) is_displayed() (設(shè)置該元素是否用戶可見) 例: #返回元素的結(jié)果是否可見,返回結(jié)果為True或False result = driver.find_element_by_id(kw).is_displayed() print result鼠標(biāo)事件:實際的web產(chǎn)品測試中發(fā)現(xiàn),有關(guān)鼠標(biāo)的操作,不單單只有單機(jī),有時候還用到右擊,雙擊,拖動等操作,這些操作包含在ActionChains類中。 ActionChains類鼠標(biāo)操作的常用方法: context_click() 右擊 dou

8、ble_click() 雙擊 drag_and_drop() 拖動 move_to_element() 鼠標(biāo)懸停在一個元素上 click_and_hold() 按下鼠標(biāo)左鍵在一個元素上 鼠標(biāo)右擊操作: context_click() (右鍵點擊一個元素) 例: #引入ActionChains類 from mon.action_chains import ActionChains . #定位到要右擊的元素 right = driver.find_element_by_xpath(XX) #對定位到的元素執(zhí)行鼠標(biāo)右鍵操作 ActionChains(driver).context_click(rig

9、ht).perform() ActionChains(driver):driver:webdriver實例執(zhí)行用戶操作。ActionChains 用于生成用戶的行為:所有的行為都存儲在ActionChains對象。通過 perform()執(zhí)行存儲的行為。 perform():執(zhí)行所有ActionChains中存儲的行為。perfrom()同樣也是 ActionChains類提供的方法,通常與ActionChains()配合使用。鍵盤事件:有時候我們在測試時需要使用tab鍵將焦點轉(zhuǎn)移到下一個元素,用于驗證元素的排序是否正確。webdriver的keys()類提供鍵盤上所有按鍵的操作,甚至可以模擬

10、一些組合鍵的操作,如Ctrl+A,Ctrl+C/Ctrl+V等。在某些更復(fù)雜的情況下,還會出現(xiàn)使用send_keys來模擬上下鍵來操作下拉列表的情況。代碼示例:打印信息 通常我們可以通過獲得頁面的title、URL地址,頁面上的標(biāo)識性信息(如:登錄成功的“歡迎,XXX”信息)來判斷用例執(zhí)行成功。 在實際測試中,訪問1個頁面然后判斷其title是否符合預(yù)期是很常見的一個用例,假如一個頁面的title應(yīng)該是“百度一下”,那么用例可以這樣描述:訪問該頁面,判斷頁面title是否等于“百度一下”。 獲取當(dāng)前URL也是非常重要的一個操作,在某些情況下,你訪問一個URL,這時系統(tǒng)會自動對這個URL進(jìn)行跳轉(zhuǎn)

11、,這就是所謂的“重定向”。一般測試重定向的方法是訪問這個URL,然后等待頁面重定向完畢之后,獲取當(dāng)前頁面的URL,判斷該URL是否符合預(yù)期。如果頁面的URL返回不正確,而表示當(dāng)前操作沒有進(jìn)行正常的跳轉(zhuǎn)。示例代碼:設(shè)置等待時間: sleep():設(shè)置固定休眠時間。Python的time包提供了休眠方法sleep(),導(dǎo)入time包后就可以使用sleep()進(jìn)行腳本的執(zhí)行過程進(jìn)行休眠。 implicity_wait():是webdirver提供的一個超時等待。等待一個元素被發(fā)現(xiàn),或一個命令完成。如果超出了設(shè)置時間則拋出異常。 WebDriverWait():同樣也是webdirver提供的方法。在

12、設(shè)置時間內(nèi),默認(rèn)每隔一段時間檢測一次當(dāng)前頁面元素是否存在,如果超過設(shè)置時間檢測不到則拋出異常。代碼如下:定位一組元素(復(fù)選框): WebElement接口同樣提供了定位一組元素的方法find_elements。 定位一組對象一般用于以下場景: 批量操作對象,比如將頁面上所有的checkbox都勾上 先獲取一組對象,再在這組對象中過濾出需要具體定位的一些對象。比如 定位出頁面上所有的checkbox,然后選擇最后一個。示例代碼:import osos.path.abspath()os模塊為Python語言標(biāo)準(zhǔn)庫中的os模塊包含普遍的操作系統(tǒng)功能。主要用于操作本地目錄文件。path.abspath

13、()方法用于獲取當(dāng)前路徑下的文件。另外腳本中還使用到for循環(huán),對inputs獲取的一組元素進(jìn)行循環(huán),在Python語言中循環(huán)變量(input)可以不用事先聲明直接使用。通過css方式來勾選一組元素,打印當(dāng)所勾選元素的個數(shù)并對最后一個勾選的元素取消勾選。len() len為Python語言中的方法,用于返回一個對象的長度(或個數(shù))。pop() pop也為Python語言中提供的方法,用于刪除指定位置的元素,pop()為空默認(rèn)選擇最后一個元素。對話框處理:現(xiàn)在很多前端對話框是div形式的,這就讓我們處理變得十分簡單。以百度首頁登錄為例。下面通過腳本對百度進(jìn)行登錄操作。driver.find_el

14、ement_by_class_name(tang-content).find_element_by_name(userName)第一次定位找到彈出的登錄框,在登錄框上再次定位找到了用戶名輸入框。瀏覽器多窗口處理:WebDriver提供了相關(guān)方法可以很輕松的在多個窗口之間切換并操作不同窗口上的元素。 要想在多個窗口之間切換,首先要獲得每一個窗口的唯一標(biāo)識符號(句柄)。通過獲得的句柄來區(qū)別分不同的窗口,從而對不同窗口上的元素進(jìn)行操作。 處理過程:這個處理過程相比我們前面的元素操作來說稍微復(fù)雜一些,執(zhí)行過程為:首選通過nowhandle 獲得當(dāng)前窗口(百度首頁)的句柄;然后,打開注冊窗口(注冊頁);

15、通過allhandles 獲得所有窗口的句柄;對所有句柄進(jìn)行循環(huán)遍歷;判斷窗口是否為nowhandle(百度首頁),如果不是則獲得當(dāng)前窗口(注冊頁)的句柄;然后,對注冊頁上的元素進(jìn)行操作。最后,回返到首頁。為了使執(zhí)行過程更多更容易理解,在切換到注冊頁時,打印了now register window!一條信息;切換回百度首頁時,我們在輸入框輸入了“注冊成功!”。注意,我們在切換到注冊頁時,只是切換了一下郵箱注冊標(biāo)簽,如果要直執(zhí)行注冊過程還需要添加更多的操作步驟。在本例中所有用到的新方法:current_window_handle (獲得當(dāng)前窗口句柄)window_handles (返回的所有窗口

16、的句柄到當(dāng)前會話)switch_to_window() (用于處理多窗口操作的方法,switch_to_window()用于處理多窗口之前切換,switch_to_frame() 用于處理多框架的切換。)close() (如果你足夠細(xì)心會發(fā)現(xiàn)我們在關(guān)閉“注冊頁”時用的是close()方法,而非quit();close()用于關(guān)閉當(dāng)前窗口,quit()用于退出驅(qū)動程序并關(guān)閉所有相關(guān)窗口。)alert/confirm/prompt處理JavaScript所生成的alert、confirm以及prompt是很簡單的。具體思路是使用switch_to.alert()方法定位到alert/confirm

17、/prompt。然后使用text/accept/dismiss/send_keys 按需進(jìn)行操做。 text 返回alert/confirm/prompt 中的文字信息。l accept 點擊確認(rèn)按鈕。l dismiss 點擊取消按鈕,如果有的話。l send_keys 輸入值,這個alertconfirm 沒有對話框就不能用了,不然會報錯。以百度設(shè)置頁面為例,腳本如下:switch_to_alert() 用于獲取網(wǎng)頁上的警告信息。我們可以對警告信息做如下操作:下拉框處理:想定位下拉框中的內(nèi)容,首先需要定位到下拉框;然后二次定位下拉框中的值。示例代碼:需要說明的是在實際的web測試中,會發(fā)現(xiàn)各

18、種類型的下拉框,并非我們所介紹的傳統(tǒng)的下拉框。有的類型的下拉框一般的處理是兩次點擊,第一點擊彈出下拉框,第二次點擊操作元素。當(dāng)然,也有些下拉框鼠標(biāo)移上去直接彈出的,那么我們可以使用move_to_element()進(jìn)行操作。上傳文件:上傳過程一般要打開一個系統(tǒng)的Window窗口,從窗口選擇本地文件添加。所以,一般會卡在如何操作本地window窗口。其實,上傳本地文件沒我們想的那么復(fù)雜:只要定位上傳按鈕,通過send_keys添加本地文件路徑就可以了。上傳的文件一定要存在。示例代碼:控制瀏覽器滾動條:有時候web頁面上的元素并非直接可見的,就算把瀏覽器最大化,我們依然需要拖動滾動條才能看到想要操作的元素,這個時候就要控制頁面滾動條的拖動,但滾動條并非頁面上的元素,可以借助JavaScript是來完成操作的。 一般用到操作滾動條的會有兩個場景: 注冊時的法律條文的閱讀,判斷用戶是否閱讀完成的標(biāo)準(zhǔn)是:滾動條是否拉 到最下方。 要操作的頁面元素不在視覺范圍,無法進(jìn)行操作,需要拖動滾動條。用于標(biāo)示滾動條位置的代碼:如果滾動條在最上方的話,scrollTop = 0,滾動條在最下方,scrollTop = 100000,。百度搜索結(jié)果頁且滾動條在頁面底,下面通過腳本實現(xiàn):cookie處理:有時候我們需要驗證瀏覽器中是否存在某個c

溫馨提示

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

最新文檔

評論

0/150

提交評論