1.你是如何搭建ui自動化框架的禽绪?
在搭建ui自動化框架淆院,使用的是po設計模式箫攀,也就是把每一個頁面所需要
操作的元素和步驟都封裝成一個頁面類中。然后使用selenium+unittest搭建
四層框架實現(xiàn)數據树叽、腳本、業(yè)務邏輯分離(關鍵字驅動)谦絮。其中四層框架包括
基礎層(BasePage)题诵、業(yè)務邏輯層(Pages)、數據層(Data)层皱、測試用例層(Testcase)
1.基礎層(BasePage)
設計一個基本的Page類性锭,所有頁面皆繼承該類。提供一個頁面需要實現(xiàn)的基本功能及公共方法叫胖。
2. 業(yè)務邏輯層(Pages)
按照PO設計模式草冈,將每個頁面抽象為一個類,放在Pages包里面瓮增,每個頁面繼承Basepage,可調用Data層數據怎棱,包括頁面所有的操作對象屬性和實現(xiàn)的功能
3.數據層(Data)
該層存放相關數據,例如:用戶數據和密碼绷跑。在測試用例可通過調用數層的數據來進行操作拳恋。
4. 測試用例層(Testcases)
每一個測試用例testcase都對應Pages里面的一個頁面,繼承unnitest.TestCase類
通過調用對應頁面類的方法你踩,數據層的數據诅岩、增加斷言(assert)來驗證功能的正確性。
此外通過Jenkins自動執(zhí)行測試带膜、代碼質量檢測和部署到測試服務器吩谦、部署到生產服務器上
2.UI自動化測試中定位方式有哪些,哪些是你常用的膝藕?
By ID
By Class Name
By Tag Name
By Name
By Link Text
By Partial Link Textzhi
By CSS Seletor
By XPath
3.UI自動化測試有哪些缺點式廷?如何改進?
不穩(wěn)定芭挽,頁面經常變滑废,不好定位蝗肪,不適合業(yè)務復雜和頻繁變動的項目
改進:在項目中盡量使用顯示等待
4.請你描述一下在UI自動化運用的等待機制區(qū)別?
sleep()強制等待蠕趁,設置固定休眠時間薛闪,執(zhí)行sleep()后線程休眠
而另外兩種線程不休眠
隱式等待,是設置的全局等待
顯示等待俺陋,是針對于某個特定的元素設置的等待時間
5.PO設計模式的原理豁延?哪些地方能夠改善?
原理:
PO模式腊状,全稱 Page object ,頁面對象模型诱咏。
將頁面的元素定位和元素行為封裝成一個 page 類。
實現(xiàn)頁面對象和測試用例分離缴挖。
改善:
其中對對象庫層袋狞、邏輯層、業(yè)務層進行了一系列封裝
6.Unittest框架有什么缺點映屋?
1 不夠靈活苟鸯,比如進行 ui 自動化設計時,會多次打開瀏覽器秧荆,增加腳本運行時間
2 測試報告不夠全面倔毙,沒有 pytest 的 allure 測試報告清晰美觀
7.Webdriver的原理
由于客戶端腳本(java, python, ruby)不能直接與瀏覽器通信,這時候可以把Webdriver 當做一個翻譯器乙濒,它可以把客戶端代碼翻譯成瀏覽器可以識別的代碼(比如js).客戶端(也就是測試腳本)創(chuàng)建 1 個 session陕赃,在該 session 中通過 http 請求向Webdriver 發(fā)送請求,Webdriver 翻譯成瀏覽器懂得腳本傳給瀏覽器颁股,瀏覽器把執(zhí)行的結果返回給 Webdriver,Webdriver 把返回的結果做了一些封裝(一般都是 json 格式)么库,然后返回給客戶端,根據返回值就能判斷對瀏覽器的操作是不是執(zhí)行成功。
8.selenium 中 hidden 或者是 display = none 的元素是否可以定位到?
不能
9.如何提高 selenium 腳本的執(zhí)行速度?
1減少操作步驟甘有,減少腳本用例不必要的步驟
2設置等待時間的時候诉儒,可以
sleep 固定的時間,也可以檢測某個元素出現(xiàn)后中斷等待也可
以提高速度
3實現(xiàn)多線程亏掀。在編寫測試用例的時候忱反,一定要實現(xiàn)松耦合,然后在服務器允許的情況下滤愕,
盡量設置多線程運行温算,提高執(zhí)行速度。
10.如何實現(xiàn)多線程间影?
先寫一個run的函數
保證for循環(huán)能跑的通
在run函數上加個裝飾器 @threads(n),n是線程數
11.說一下XPATH定位的原理注竿?
基于HTML的文檔目錄結構進行定位元素
12.selenium中如何判斷元素一定存在?
Presense_of_element_located
強制等待、隱性等待巩割、顯性等待
1.強制等待--固定等待一段時間裙顽,即使設置一定的等待時間,也不能確保一定能夠定位到元素宣谈,因為你無法知道頁面加載的時間愈犹,而且這種方法通常比較浪費腳本執(zhí)行時間,效率低
2.隱性等待--設置最長的等待時間蒲祈,在這個時間內甘萧,當元素被加載出現(xiàn)在dom樹中且頁面被完全加載完成之后,才執(zhí)行下一步操作梆掸,保證了腳本的穩(wěn)定性,但執(zhí)行效率相對較低牙言,因為往往我們只需要目標元素出現(xiàn)即可酸钦,并不需要掙個頁面加載完成,而隱性等待要等待掙個頁面加載完才能執(zhí)行下一步咱枉,浪費一定時間卑硫,那么為了解決這種弊端又引入了顯示等待。
3.顯示等待--顯示等待實現(xiàn)方式通過判斷某一個條件是否成立蚕断,如果成立就立即執(zhí)行下一步操作欢伏,不需要等待頁面加載完成,執(zhí)行效率高亿乳,腳本的穩(wěn)定性也相對較高
selenium原理
我們使用Selenium實現(xiàn)自動化測試硝拧,主要需要3個東西
1.測試腳本,可以是python葛假,java編寫的腳本程序(也可以叫做client端)
2.瀏覽器驅動障陶,這個驅動是根據不同的瀏覽器開發(fā)的,不同的瀏覽器使用不同的webdriver驅動程序且需要對應相應的瀏覽器版本
3.瀏覽器聊训,目前selenium支持市面上大多數瀏覽器抱究,不同的瀏覽器使用不同的webdriver驅動程序且需要對應的瀏覽器版本
selenium工作過程
1.selenium client(python等語言編寫的自動化測試腳本)初始化一個service服務,通過webdriver啟動瀏覽器驅動程序chromedriver.exe
2.通過RemoteWebDriver向瀏覽器驅動程序發(fā)送HTTP請求带斑,瀏覽器驅動程序解析請求鼓寺,打開瀏覽器,并獲得sessionid,如果再對瀏覽器操作需攜帶此id
3.打開瀏覽器后勋磕,所有的selenium的操作(訪問地址妈候,查找元素)均通過RemoteConection鏈接到remote server,
然后使用execute方法調用request方法通過urlib3向remote server請求
4.瀏覽器通過請求的內容執(zhí)行對應動作
5.瀏覽器再把執(zhí)行的動作結果通過瀏覽器驅動程序返回給測試腳本