UI自動(dòng)化面試題

1.你是如何搭建ui自動(dòng)化框架的?

在搭建ui自動(dòng)化框架,使用的是po設(shè)計(jì)模式,也就是把每一個(gè)頁(yè)面所需要

操作的元素和步驟都封裝成一個(gè)頁(yè)面類中。然后使用selenium+unittest搭建

四層框架實(shí)現(xiàn)數(shù)據(jù)、腳本、業(yè)務(wù)邏輯分離(關(guān)鍵字驅(qū)動(dòng))。其中四層框架包括

基礎(chǔ)層(BasePage)、業(yè)務(wù)邏輯層(Pages)、數(shù)據(jù)層(Data)、測(cè)試用例層(Testcase)

1.基礎(chǔ)層(BasePage)

設(shè)計(jì)一個(gè)基本的Page類,所有頁(yè)面皆繼承該類。提供一個(gè)頁(yè)面需要實(shí)現(xiàn)的基本功能及公共方法。

2. 業(yè)務(wù)邏輯層(Pages)

按照PO設(shè)計(jì)模式,將每個(gè)頁(yè)面抽象為一個(gè)類,放在Pages包里面,每個(gè)頁(yè)面繼承Basepage,可調(diào)用Data層數(shù)據(jù),包括頁(yè)面所有的操作對(duì)象屬性和實(shí)現(xiàn)的功能

3.數(shù)據(jù)層(Data)

該層存放相關(guān)數(shù)據(jù),例如:用戶數(shù)據(jù)和密碼。在測(cè)試用例可通過調(diào)用數(shù)層的數(shù)據(jù)來進(jìn)行操作。

4. 測(cè)試用例層(Testcases)

每一個(gè)測(cè)試用例testcase都對(duì)應(yīng)Pages里面的一個(gè)頁(yè)面,繼承unnitest.TestCase類

通過調(diào)用對(duì)應(yīng)頁(yè)面類的方法,數(shù)據(jù)層的數(shù)據(jù)、增加斷言(assert)來驗(yàn)證功能的正確性。

此外通過Jenkins自動(dòng)執(zhí)行測(cè)試、代碼質(zhì)量檢測(cè)和部署到測(cè)試服務(wù)器、部署到生產(chǎn)服務(wù)器上

2.UI自動(dòng)化測(cè)試中定位方式有哪些,哪些是你常用的?

By ID

By Class Name

By Tag Name

By Name

By Link Text

By Partial Link Textzhi

By CSS Seletor

By XPath


3.UI自動(dòng)化測(cè)試有哪些缺點(diǎn)?如何改進(jìn)?

不穩(wěn)定,頁(yè)面經(jīng)常變,不好定位,不適合業(yè)務(wù)復(fù)雜和頻繁變動(dòng)的項(xiàng)目

改進(jìn):在項(xiàng)目中盡量使用顯示等待


4.請(qǐng)你描述一下在UI自動(dòng)化運(yùn)用的等待機(jī)制區(qū)別?

sleep()強(qiáng)制等待,設(shè)置固定休眠時(shí)間,執(zhí)行sleep()后線程休眠

而另外兩種線程不休眠

隱式等待,是設(shè)置的全局等待

顯示等待,是針對(duì)于某個(gè)特定的元素設(shè)置的等待時(shí)間


5.PO設(shè)計(jì)模式的原理?哪些地方能夠改善?

原理:

PO模式,全稱 Page object ,頁(yè)面對(duì)象模型。

將頁(yè)面的元素定位和元素行為封裝成一個(gè) page 類。

實(shí)現(xiàn)頁(yè)面對(duì)象和測(cè)試用例分離。

改善:

其中對(duì)對(duì)象庫(kù)層、邏輯層、業(yè)務(wù)層進(jìn)行了一系列封裝


6.Unittest框架有什么缺點(diǎn)?

1 不夠靈活,比如進(jìn)行 ui 自動(dòng)化設(shè)計(jì)時(shí),會(huì)多次打開瀏覽器,增加腳本運(yùn)行時(shí)間

2 測(cè)試報(bào)告不夠全面,沒有 pytest 的 allure 測(cè)試報(bào)告清晰美觀


7.Webdriver的原理

由于客戶端腳本(java, python, ruby)不能直接與瀏覽器通信,這時(shí)候可以把Webdriver 當(dāng)做一個(gè)翻譯器,它可以把客戶端代碼翻譯成瀏覽器可以識(shí)別的代碼(比如js).客戶端(也就是測(cè)試腳本)創(chuàng)建 1 個(gè) session,在該 session 中通過 http 請(qǐng)求向Webdriver 發(fā)送請(qǐng)求,Webdriver 翻譯成瀏覽器懂得腳本傳給瀏覽器,瀏覽器把執(zhí)行的結(jié)果返回給 Webdriver,Webdriver 把返回的結(jié)果做了一些封裝(一般都是 json 格式),然后返回給客戶端,根據(jù)返回值就能判斷對(duì)瀏覽器的操作是不是執(zhí)行成功。


8.selenium 中 hidden 或者是 display = none 的元素是否可以定位到?

不能


9.如何提高 selenium 腳本的執(zhí)行速度?

1減少操作步驟,減少腳本用例不必要的步驟

2設(shè)置等待時(shí)間的時(shí)候,可以

sleep 固定的時(shí)間,也可以檢測(cè)某個(gè)元素出現(xiàn)后中斷等待也可

以提高速度

3實(shí)現(xiàn)多線程。在編寫測(cè)試用例的時(shí)候,一定要實(shí)現(xiàn)松耦合,然后在服務(wù)器允許的情況下,

盡量設(shè)置多線程運(yùn)行,提高執(zhí)行速度。


10.如何實(shí)現(xiàn)多線程?

先寫一個(gè)run的函數(shù)

保證for循環(huán)能跑的通

在run函數(shù)上加個(gè)裝飾器 @threads(n),n是線程數(shù)


11.說一下XPATH定位的原理?

基于HTML的文檔目錄結(jié)構(gòu)進(jìn)行定位元素


12.selenium中如何判斷元素一定存在?

Presense_of_element_located


強(qiáng)制等待、隱性等待、顯性等待

1.強(qiáng)制等待--固定等待一段時(shí)間,即使設(shè)置一定的等待時(shí)間,也不能確保一定能夠定位到元素,因?yàn)槟銦o法知道頁(yè)面加載的時(shí)間,而且這種方法通常比較浪費(fèi)腳本執(zhí)行時(shí)間,效率低

2.隱性等待--設(shè)置最長(zhǎng)的等待時(shí)間,在這個(gè)時(shí)間內(nèi),當(dāng)元素被加載出現(xiàn)在dom樹中且頁(yè)面被完全加載完成之后,才執(zhí)行下一步操作,保證了腳本的穩(wěn)定性,但執(zhí)行效率相對(duì)較低,因?yàn)橥覀冎恍枰繕?biāo)元素出現(xiàn)即可,并不需要掙個(gè)頁(yè)面加載完成,而隱性等待要等待掙個(gè)頁(yè)面加載完才能執(zhí)行下一步,浪費(fèi)一定時(shí)間,那么為了解決這種弊端又引入了顯示等待。

3.顯示等待--顯示等待實(shí)現(xiàn)方式通過判斷某一個(gè)條件是否成立,如果成立就立即執(zhí)行下一步操作,不需要等待頁(yè)面加載完成,執(zhí)行效率高,腳本的穩(wěn)定性也相對(duì)較高



selenium原理

我們使用Selenium實(shí)現(xiàn)自動(dòng)化測(cè)試,主要需要3個(gè)東西

1.測(cè)試腳本,可以是python,java編寫的腳本程序(也可以叫做client端)

2.瀏覽器驅(qū)動(dòng),這個(gè)驅(qū)動(dòng)是根據(jù)不同的瀏覽器開發(fā)的,不同的瀏覽器使用不同的webdriver驅(qū)動(dòng)程序且需要對(duì)應(yīng)相應(yīng)的瀏覽器版本

3.瀏覽器,目前selenium支持市面上大多數(shù)瀏覽器,不同的瀏覽器使用不同的webdriver驅(qū)動(dòng)程序且需要對(duì)應(yīng)的瀏覽器版本


selenium工作過程

1.selenium client(python等語(yǔ)言編寫的自動(dòng)化測(cè)試腳本)初始化一個(gè)service服務(wù),通過webdriver啟動(dòng)瀏覽器驅(qū)動(dòng)程序chromedriver.exe

2.通過RemoteWebDriver向?yàn)g覽器驅(qū)動(dòng)程序發(fā)送HTTP請(qǐng)求,瀏覽器驅(qū)動(dòng)程序解析請(qǐng)求,打開瀏覽器,并獲得sessionid,如果再對(duì)瀏覽器操作需攜帶此id

3.打開瀏覽器后,所有的selenium的操作(訪問地址,查找元素)均通過RemoteConection鏈接到remote server,

然后使用execute方法調(diào)用request方法通過urlib3向remote server請(qǐng)求

4.瀏覽器通過請(qǐng)求的內(nèi)容執(zhí)行對(duì)應(yīng)動(dòng)作

5.瀏覽器再把執(zhí)行的動(dòng)作結(jié)果通過瀏覽器驅(qū)動(dòng)程序返回給測(cè)試腳本

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • https://cn.vuejs.org/v2/guide/migration-vuex.html 一、安裝并引入...
    jrg陳咪咪sunny閱讀 285評(píng)論 0 0
  • 愛生活,做自己 寫在前面 這一次的書評(píng)來的比之前晚了很多,以前的自己看完了一本書會(huì)在最快的時(shí)間寫下滿腦的思緒,生怕...
    A羅小布閱讀 374評(píng)論 1 4
  • 文/暄妍若梅 夢(mèng)想,是生活的動(dòng)力,是我們心心念念最向往的國(guó)度。 歲月,是青春的墳?zāi)?,卻見證著我們一路走來的艱...
    暄妍若梅閱讀 738評(píng)論 1 3
  • babystack 這道題目用到了一個(gè) vsyscall 的點(diǎn)。。。 保護(hù) : nx , pie 限制 : 輸入長(zhǎng)...
    fantasy_learner閱讀 549評(píng)論 0 0
  • 其實(shí)挺久沒有看電影了,今天的兩個(gè)電影,一個(gè)是七月“現(xiàn)男友”推薦的有“小米”參演的電影《地球最后的夜晚》,湯唯主演,...
    橙色女孩閱讀 257評(píng)論 0 1

友情鏈接更多精彩內(nèi)容