1. 程式人生 > >Web自動化必會知識:「Web基礎、元素定位、元素操作、Selenium執行原理、專案實戰+框架」

Web自動化必會知識:「Web基礎、元素定位、元素操作、Selenium執行原理、專案實戰+框架」

1.web 基礎-html、dom 物件、js 基本語法

Dom 物件裡面涉及元素定位以及對元素的修改。因為對元素操作當中涉及的一些 js 操作,js 基本語法要會用。得要掌握前端的基本用法。為什麼要元素定位?因為找到這個元素,就能告訴程式碼要找誰要做什麼。

2.元素定位

四大基本元素定位:id name class_name tag_name

針對連結:link_text

部分文字內容:partial_link_text

萬能定位方式:xpath css

常用的元素定位方式是:id xpath

css 選擇器的定位方式看起來比較複雜,和前端掛鉤,但是 css 能做的事,xpath 一樣能做。只要能解決問題就行。

動態 id,可以用別的屬性來定位。xpath 基本的定位原則是:相對路徑,相對路徑中基本的定位方式是//標籤名[@屬性名=值]

但是這種基本定位方式對我們來說不夠用,所以增加了邏輯運算://標籤名[@屬性名=值 and/or@屬性名=值 ]

以上是靠自身的屬性來定位,還可以靠文字內容來定位:通過文字匹配的方式,「目前 css 是不支援文字定位方式的。」 但是 xpath 可以定位:文字全匹配://標籤名[text()=文字值]

文字和屬性的部分匹配://標籤名[contains(text()/@屬性值,部分值)]

以上 3 種是根據自己的特質來匹配的。

如果靠自己的特質不行的話,可以通過:

1.層級定位:先定位到上級或者上上級,縮小範圍,再定位元素。

2.軸定位:找各種關係來定位。這種一般在表格當中比較多。軸定位的方式有這幾種:

ancestor:祖先

parent:父母(這裡主要指爸爸)

兄弟姐妹:

preceding-sibling:選取當前節點之前的所有同級節點,同一個parent下該節點之前的節點,即“哥哥”節點(是同父的哥哥節點)。

following-sibling:選取當前節點之後的所有同級節點。

在各種定位解決不了問題的情況下就可以用軸定位了。各種定位方式隨便組合,就能夠定位到你要的東西。

「定位原則:」

定位也非常影響指令碼的穩定性,如果定位做的不好,這個影響也是比較大的。

1.儘量不要使用絕對路徑和下標。

2.通過定位方式唯一匹配元素,匹配一個元素,而且確保這個元素就是你要找的。

3.選擇元素穩定的屬性。(這樣不至於元素一變動或者頁面的內容一變動,這個元素對應的東西也變了。可變的屬性不要作為元素定位手段)這個需要自己觀察了。

3.元素操作

「頁面最基本的 4 大操作(函式):」

send_keys:輸入

click:點選

text:獲取文字值

get_attribute:獲取屬性

在 APP 的 web 自動化中直接套用這 4 大操作。

針對特殊的元素做的一些處理:

「三種等待方式:」

sleep:強制等待

implicity_wait:隱形等待

WebdriverWait和expected_condition:顯示等待

在實際工作過程當中,sleep會和WebdriverWait和expected_condition結合起來用。

sleep僅僅作為輔助作用,WebdriverWait和條件組合起來能夠找到元素,但是在執行的時候會告訴我,這個元素還沒有出現,這種情況下不用覺得它沒有用。「再借助sleep0.5 秒或者 1 秒都可以。」 給頁面一個緩衝的時間,雖然它可能找到了,但是可能頁面渲染還沒有成功。

sleep不應該睡眠太久,這樣很浪費時間。WebdriverWait這個顯性等待是我們用的最多的。WebdriverWait是一個類,它處理的是我們的等待。它有一個等待上限。

「顯性等待的用法:」

WebdriverWait(driver,timeout,0.5 ).until/until_not 會話物件 超時時長(最多能等多久,隔多久看一眼) 預設是 0.5,可以改成別的數字

WebdriverWait有 2 個函式until/until_not,一個是直到條件滿足,一個是直到條件不滿足。

「怎麼表達條件?」

條件就用expected_condition 期望的條件。可以用它來作為條件表達,條件表達最常用的就是元素可見。關於它的傳參,是一個元組等等。visibility_of_element_located((元素定位型別,元素定位表示式))

還有元素存在,元素可點選等等。

「三種切換:」

三種切換都用到了等待。

iframe切換、window切換、alert彈框都有一個顯性等待。

iframe切換是一定要有iframe才需要切換。一定要確保你的元素確實是在iframe裡面。至於如何確認的,請回看文章《三種切換》。

iframe本質上也是一個元素,只不過它的標籤名叫做iframe。但是它裡面放的是個 web 頁面。

APP 自動化中就有這樣的情況,外面是一個安卓的控制元件元素,但是控制元件裡面放的是 web 網頁。這裡也是一樣的意思。iframe是外面的主頁的一個元素控制元件。跟它裡面放的是一個 html 頁面含義是一樣的。

在 App 自動化中 h5 的混合應用,也就是 web 網頁和安卓原生控制元件混在一個頁面中的時候,也要涉及切換,道理和iframe一樣的。結合了iframewindows

「iframe切換可以根據哪些屬性?」

name 下標 表示式 WebElement物件

以上這些都可以切換進去的。切換是這樣做的:在我們 selenium Webdriver 當中切換是統一的driver.switch_to.frame/window/alert

APP 自動化中也是driver.switch_to。這個東西是通用的,只是後面跟的名字不一樣。

「windows 的處理流程是:」

要獲取當前所有的window_handle(driver.window_handle)得到的是一個列表。最後一個是最新開啟的視窗。是根據它的控制代碼,也就是根據列表當中的位置去切換的。自己要清楚它在哪個位置。

alert彈框」

只有處理了alert才能對頁面進行操作。一個瀏覽器當前直接只能有一個alert。它是一個alert類來處理的。alert當中有accetp\dissmis來表示接收和拒絕。

「滑鼠/鍵盤操作」

滑鼠:ActionChains類:這個類裡面分為 2 種操作型別:

將所有的操作雙擊、點選、拖拽、右鍵這樣的東西都是放在一個列表當中。

1.滑鼠行為函式(move_to_element、懸浮元素的定位)。

2.perform()函式是用來執行滑鼠操作的。

能不用滑鼠就不用滑鼠,如果有其它的按鍵操作就代替滑鼠操作,因為滑鼠操作不穩定。

APP 自動化中有一個東西的套路和ActionChains的套路是一樣的。Web 自動化的基本東西和框架掌握了,那麼 APP 自動化就沒有什麼難度。

「鍵盤操作」:send_keys(Keys)

send_keys(Keys類)本來就是用來發送資料的。1,2,3...等這樣的簡單數字就用send_keys()發就可以。

沒必要用到 Keys 類。當你用到組合鍵的時候,就可以用 Keys 類。其它情況下,沒事不用它。

「下拉列表:」

Select\option-Select類來處理。

Select類來處理,有哪 3 種選擇的方式?例項化的時候傳什麼樣的物件?

例項化類的時候,初始化引數是Select元素。

「列表選值的 3 種方式:」

index/value/visible_text

valuevalue屬性。index是它在這個列表中所處的位置,從 0 開始。visible_text是指它的文字內容。

有哪個用哪個,如果value/visible_text沒有,那麼index是肯定可以用的。根據實際情況而定。

以上這些是特別的處理,其它的下拉列表,例如通過 div 實現的,等到下拉列表出現再去處理。像這種是不需要等到下拉列表出現的,直接省了這個步驟,也不需要你去點一下讓它出現。

「js-滾動條:」

APP 其實也有滾動條的,但是做法有點點區別。滾動條是執行 js 語句。driver.execute_script(js語句,引數)

這個引數可以傳很多個。這個引數是給 js 語句用的。

Arguments[0]scrollintoView()

傳參 滾動到可見區域

預設是 True,與上邊對齊。改成 False,是與下邊對齊。

Arguments[0] 0 來自於這個driver.execute_script(js語句,引數)執行語句中的引數,是第一個引數。如果是第二個,就是Arguments[1]

「由引數的個數決定Arguments裡面的下標值到底是幾。」

至於滾動到頁面底部和滾動到頁面頂部,用scrollintoView()

另外一個 js 中的語法也可以做這個事情:scrollintoViewifneeded()

並不是一定要處理滾動條,看系統。如果框架實現了截圖,截圖裡也看不到,元素是可見的但是提示你不可見,那就需要你將它滾動到可見區域。很多情況下是不需要將它滾動到可見區域的。

「js-日期:」

如果不好做這塊的自動化就不要做了,就手點了。

日期輸入框readonly屬性。

也有可以編輯的時候,如果可以編輯就按照系統規定的格式輸入。如果是不可以輸入的,移除readonly屬性,或者將它設定為 False。

「檔案上傳:」

autoit需要學習成本。在 mac 或者 linux 下面,用autoit

pywin32:專門針對 windows 做的檔案上傳。這塊的程式碼在《利用 pywin32 庫上傳檔案》一文裡,你們直接拷貝就可以,不需要自己再寫一遍了,明白你需要改的地方是什麼就可以了,有需要的自取。

4.Selenium 執行原理

以命令的形式定義好了內部 http 通訊協議。所有的命令都定義好了,所有的函式基本操作都是通過傳送命令來實現的。詳情請回看《元素定位和元素定位輔助工具》一文。

對原理有進一步的認知是比較好的。要成為一個會研究的人而不是隻會用的人,所以多看原始碼。

5.專案實戰+框架

1.業務瞭解,需求瞭解。(如果公司讓你寫一份自動化測試計劃,這個就是整個自動化測試計劃的一部分。前期就是要花時間瞭解業務的。)詳細的請回看《做自動化之前的準備工作》一文。

2.測試用例的實現、篩選(多和團隊人員交流,瞭解全方位的資訊)、用例評審。

3.框架、大概用多少時間實現自動化測試用例、持續整合jenkins、優化和除錯、提高用例通過率(通過率至少80%)、哪些是冒煙用例(什麼時候/執行時長)、SIT/預生產、郵件通知。

4.維護階段(分析測試報告--哪些是bug、哪些是你程式碼的bug、哪些是環境問題)

5.彙報。

在前期就應該明白哪些是冒煙用例,實現用例可能兩個月,後期的除錯需要半個月,除錯是需要時間的,也不簡單。什麼時候冒煙,什麼時候迴歸,每週執行多少次,週末要不要執行等這些執行策略,在最開始做的時候自己就要非常清楚的。

「框架:」

PO 模式:PageObjects(頁面操作、元素定位)、TestCase(業務流程)、測試用例和測試物件分離。

進一步分層:PageLocators(頁面元素定位)、TestDatas(測試資料的分離)

Common:basepage:封裝基本函式、異常處理、失敗截圖、日誌。

Outputs:Logs、Screenshots、Reports

pytest框架:mark、引數化、fixture/conftest.py、重執行(reruns)、html測試報告、allure測試報告、xml測試報告(定製化)

pytest 的 html 測試報告當中是可以插入自動化截圖的,既然用了 Allure 就不需要這個功能了。

6.問題整理

Jenkins 中可以關聯工程的執行順序的。可以設定當前工程執行成功之後再去執行下一個工程。

「pytest 裡面有個 skip 是什麼?」

unittest 也有 skip。是指這個用例不想執行的話就跳過去。

「執行機和本機不能是同一臺電腦。」

ps:假如領導讓處理你不熟悉的領域的事,不要猶豫,趕緊去做。有什麼不懂得可以多和上司溝通,自己不需要做決策,可以提供方案讓領導來選擇。遇事不退縮,勇敢面對。


公眾號 「「清菡軟體測試」首發,更多原創文章:清菡軟體測試 78+原創文章,歡迎關注、交流,禁止第三方擅自轉載。

相關推薦

Web自動化知識Web基礎元素定位元素操作Selenium執行原理專案實戰+框架

1.web 基礎-html、dom 物件、js 基本語法 Dom 物件裡面涉及元素定位以及對元素的修改。因為對元素操作當中涉及的一些 js 操作,js 基本語法要會用。得要掌握前端的基本用法。為什麼要元素定位?因為找到這個元素,就能告訴程式碼要找誰要做什麼。 2.元素定位 四大基本元素定位:id name c

優秀後端架構師知識史上最全MySQL大表優化方案總結

本文原作者“ manong”,原創發表於segmentfault,原文連結:segmentfault.com/a/1190000006158186 1、引言 MySQL作為開源技術的代表作之一,是網際網路得以廣泛流行的重要基礎技術之一。 國外 GitHub、Airbnb、Yelp、

web前端工程師必備知識TCP/IP

1.OSI的7層參考模型 分層名稱 功能概述 常見協議 7 應用層 針對特定應用的協議 FTP,DNS,HTTP,SMTP等 6 表示層 負責資料格式的轉換 不用協議 5 會話層 負責建立和斷開通訊連線 不用協議

Web自動化測試理論知識

tools 不可 知識 提高 autoit 多次 重用 適合 安全性 Web 自動化理論知識 1、自動化測試概述概念:用工具代替/輔助人工完成完成軟件測試活動的過程特點: 可以對程序的新版本自動執行回歸測試 可以執行一些手工測試困難或不可能進行的測試 可以

(譯)Web是如何工作的Web開發新手的初級讀物

又是 不知道 16px really 工程 mil 消息 image rar 原文地址:https://medium.freecodecamp.org/how-the-web-works-a-primer-for-newcomers-to-web-development-o

Linux運維三劍客awk知識--模式與操作內自變量語句塊數組

三劍客 awk linux 運維 數組 Linux命令之三劍客awkawk簡介awk是三劍客中的老大,awk強大之處在於,它不僅僅是命令,還是一門語言,功能非常強大。報告生成器,格式化後顯示,可以自定義函數;awk的處理對象是記錄與字段(域)。awk處理數據的原理讀取到數據後,首先將數據分

Python全棧知識如何使用dict和set操作方法,正確的案例詳解!

Python內建了字典:dict的支援,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)儲存,具有極快的查詢速度。 舉個例子,假設要根據同學的名字查詢對應的成績,如果用list實現,需要兩個list: names = ['Michael', 'Bob

Python入門知識資料型別和變數如何操作使用方法

整數 Python可以處理任意大小的整數,當然包括負整數,在程式中的表示方法和數學上的寫法一模一樣,例如:1,100,-8080,0,等等。 計算機由於使用二進位制,所以,有時候用十六進位制表示整數比較方便,十六進位制用0x字首和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等,如果你覺

Java Web 學習筆記之八嵌入式web伺服器Jetty的基本使用

Jetty 是一個開源的servlet容器,具有易用性,可擴充套件性,易嵌入性等特點。通過少量的程式碼,開發者就可以在程式中以嵌入的方式執行一個web伺服器。 下面介紹一些Jetty使用的方式:

面試知識------資料庫

事物 它是一個操作序列,這些操作要麼都執行,要麼都不執行,它是一個不可分割的工作單位。事務是資料庫維護資料一致性的單位,在每個事務結束時,都能保持資料一致性 四個基本性質 事物是由一系列操作完成的,具有四個基本性質(ACID) 原子性(Atomicity):原子性是指

一個成熟的程序員技能賺錢

ges 得到 都是 結果 焦慮 發展 不用 霧霾 文章 我經常在這個公眾號裏收到一些讀者留言,大多數是一些年輕讀者,迷茫,焦慮,工資明明還不錯,但攢不下錢,買不了房。高學歷,985,碩士,努力了很多年也趕不上那些輕松的富二代……看著可憐又可氣。 我覺得這種心態的讀者,毛病都

Asp.NET Web API 2系列(一)初識Web API及手動搭建基本框架

 1.導言 隨著Web技術的發展,現在各種框架,前端的,後端的,數不勝數。全棧工程師的壓力越來越大。 PC端,pad端,移動端App(安卓/IOS)的發展,使得前後端一體的開發模式十分笨重。因此,前後端分離是web發展的趨勢,其中,RESTful API是目前前後端分離的最佳實踐,ASP

月薪過萬雙親委託模型

類載入器簡介 在介紹雙親委託模型之前,先介紹一下類載入器。類載入器通過一個類的全限定名來轉換為描述這個類的二進位制位元組流。 對於任意一個類,被同一個類載入器載入後都是唯一的,但如果被不同載入器載入後,就不是唯一的了。即使是源於同一個Class檔案、被同一個JVM載入,只要載入類的載入器不同,那麼類就不同。

springboot深入學習(二)-----profile配置執行原理web開發

一、profile配置 通常企業級應用都會區分開發環境、測試環境以及生產環境等等。spring提供了全域性profile配置的方式,使得在不同環境下使用不同的applicaiton.properties,走不同的配置。 模板:application-{profile}.properties 示例:

小冊上新Taro 多端開發實現原理專案實戰

學習一門技術的最好方法,就是在實踐中使用它。 Taro 也是如此。Taro 是由京東凹凸實驗室打造的一套遵循 React 語法規範的多端統一開發框架。他們為此專門撰寫了一本小冊子,主要介紹從 0 到 1 構建一個電商平臺的實戰過程。 我們通過一個從前端到後臺的完整實踐,可以經歷 React 語法的學習

重磅!頭部姿態估計原理詳解 + 實戰程式碼來啦!

寫在前面 經過兩週的文獻和部落格閱讀,CV_Life君終於欣(dan)喜(zhan)若(xin)狂(jing)地給各位帶來head pose estimation這篇文章,因為剛剛入手這個方向,如有疏漏請各位多多包涵,並多多指教。廢話少說,先放個Demo熱熱身。 Head Pose Estimatio

Windows小知識(關聯檔案開啟型別,快捷鍵,命令列語句執行原理,快速編輯模式)

如何關聯檔案的開啟型別 開啟命令執行工具,注意,win7,win8及以上的環境,要用管理員方式執行執行assoc.java=nppfile執行ftype nppfile="C:\ProgramFile

滲透測試Web漏洞

中國國情 系統錯誤 min jenkins 安全 第三方 weblogic 滲透測試 javascrip https://as.h5con.cn/articles/129985?spm=cnblog 0x00前言   本文為對WEB漏洞研究系列的開篇,日後會針對這些漏洞一一

WEB前端工程師的基本技能

第一:HTML 這是最簡單和最基本的。要控制塊級元素:div、table、p、ul、li ... 內聯元素a、font、span ...等。這些標籤是最常用的頁面佈局,要精通其功能,要特別注意頁面佈局標籤之間的關係。 Html介紹: HTML是一種用於描述網頁的語言。 HTML指的是

Robot Framework學習(8)Web自動化測試

web自動化測試用到的庫是Selenium2Library 與瀏覽器相關的關鍵字 1. Open Browser    https://www.baidu.com  ff/chrome    # 開啟瀏覽器 注:要想通過不