99道大廠軟件測(cè)試面試題及答案!百萬(wàn)年薪就靠它了
1.怎么判斷元素是否存在?
判斷元素是否存在和是否出現(xiàn)不同,判斷是否存在意味著如果這個(gè)元素壓根就不存在,就會(huì)拋出
NoSuchElementException
這樣就可以使用 try catch,如果 catch 到 NoSuchElementException 就返回 false。通常在
項(xiàng)目中會(huì)把這個(gè)功能封裝在 isElementPresent 方法中。
2.如何判斷元素是否出現(xiàn)?
判斷元素是否出現(xiàn),存在兩種情況,一種是該元素壓根就沒有,自然不會(huì)出現(xiàn);另外一種是有這
樣的元素,但是是 hidden 狀態(tài)
可以通過先判斷是否存在,如果不存在返回 false;如果存在再去判斷是否 displayed。
3.selenium中hidden或者是display = none的元素是否可以定位到?
不能,想點(diǎn)擊的話,可以用 js 去掉 dispalay=none 的屬性。


5. 如何去定位頁(yè)面上動(dòng)態(tài)加載的元素?
觸發(fā)動(dòng)態(tài)事件,然后 findElemnt
如果是動(dòng)態(tài)菜單,需要一級(jí)一級(jí) find(JS 實(shí)現(xiàn))
6.如何去定位屬性動(dòng)態(tài)變化的元素?
屬性動(dòng)態(tài)變化是指該 element 沒有固定的屬性值,所以只能通過相對(duì)位置定位
比如通過 xpath 的軸, parent/following-sibling/precent-sibling 等
另外也可以嘗試 findbyelements 遍歷
7.點(diǎn)擊鏈接以后,selenium 是否會(huì)自動(dòng)等待該頁(yè)面加載完畢?
不會(huì)的。所以有的時(shí)候,當(dāng) selenium 并未加載完一個(gè)頁(yè)面時(shí)再請(qǐng)求頁(yè)面資源,則會(huì)誤報(bào)不存在
此元素。所以首先我們應(yīng)該考慮判斷,selenium 是否加載完此頁(yè)面。其次再通過函數(shù)查找該元
素。
8.自動(dòng)化測(cè)試的時(shí)候是否需要連接數(shù)據(jù)庫(kù)做數(shù)據(jù)校驗(yàn)?
一般來(lái)說(shuō) 1、 UI 自動(dòng)化不需要(很少需要);2、接口測(cè)試會(huì)需要:從數(shù)據(jù)庫(kù)層面來(lái)進(jìn)行數(shù)據(jù)
校驗(yàn)可以更方便驗(yàn)證系統(tǒng)的數(shù)據(jù)處理方面是否正確;
9.有幾種元素常用定位方式,分別是?你最偏愛哪一種,為什么?
8 種:id、name、class name、tag name、link text、partial link text、xpath、css selector
偏愛哪一種?答:
我最常用的是 xpath(或 CssSelector)因?yàn)楹芏嗲闆r下,html 標(biāo)簽的屬性不夠規(guī)范,無(wú)法通
過單一的屬性定位,這個(gè)時(shí)候就只能使用 xpath 可以去重實(shí)現(xiàn)定位唯一 element
事實(shí)上定位最快的是 Id,因?yàn)?id 是唯一的,然而大多數(shù)開發(fā)并沒有設(shè)置 id。
10.怎么提高 selenium 腳本的自動(dòng)化執(zhí)行效率?
1.優(yōu)化測(cè)試用例,盡可不使用 sleep,減少使用 ImplicitlyWait
2.多使用 selenium 的 WebDriverWait/FluentWait,這樣可以優(yōu)化等待時(shí)間3.減少不必要的操作步驟,如經(jīng)過三四步才能打開我們要測(cè)試的頁(yè)面的話,我們就可以直接通過
網(wǎng)址來(lái)打開,減少不必要的操作。
4.中斷頁(yè)面加載,如果頁(yè)面加載的內(nèi)容過多,我們可以查看一下加載慢的原因,如果加載的內(nèi)容
不影響我們測(cè)試,就設(shè)置超時(shí)時(shí)間,中斷頁(yè)面加載。
5.使用性能好的電腦
11.用例在運(yùn)行過程中經(jīng)常會(huì)出現(xiàn)不穩(wěn)定的情況,也就是這次可以通過,下次無(wú)
法通過了,如何提高用例的穩(wěn)定性?
1、查找元素前先做判斷:ExpectedConditions 里面的各種方法;
2、顯式等待:多使用 WebDriverWait,加上顯式等待時(shí)間,等要操作的元素出現(xiàn)之后再執(zhí)行
下面的操作;適當(dāng)?shù)氖褂?sleep 作為輔助等待。
3、多用 try catch 捕獲異常;
4、多線程的時(shí)候,減少測(cè)試用例耦合度,因?yàn)槎嗑€程的執(zhí)行順序是不受控制的;
5、盡量使用測(cè)試專用環(huán)境,避免其他類型的測(cè)試同時(shí)進(jìn)行,對(duì)數(shù)據(jù)造成干擾。
6、使用重試機(jī)制,在失敗時(shí)重運(yùn)行。
12.你的自動(dòng)化用例的執(zhí)行策略是什么?
整體策略是依據(jù)項(xiàng)目實(shí)際上線和轉(zhuǎn)測(cè)試周期來(lái)定的。
1.自動(dòng)化測(cè)試用例是用來(lái)監(jiān)控的。集成到 jenkins,創(chuàng)建定時(shí)任務(wù)定時(shí)執(zhí)行;
2.有些用例在產(chǎn)品上線前必須回歸。jenkins 上將任務(wù)綁定到開發(fā)的 build 任務(wù)上,觸發(fā)執(zhí)行;
3.有些用例不需要經(jīng)常執(zhí)行。jenkins 創(chuàng)建一個(gè)任務(wù),需要執(zhí)行的時(shí)候人工構(gòu)建即可。
13.什么是持續(xù)集成?
頻繁的將代碼集成到主干,持續(xù)性的進(jìn)行項(xiàng)目的構(gòu)架,以便能能夠快速發(fā)現(xiàn)錯(cuò)誤,防止分支大幅度偏離主干
14.webdriver client 的原理是什么?
在 selenium 啟動(dòng)以后,driver 充當(dāng)了服務(wù)器的角色,跟 client 和瀏覽器通信,client 根據(jù)
webdriver 協(xié)議發(fā)送請(qǐng)求給 driver。driver 解析請(qǐng)求,并在瀏覽器上執(zhí)行相應(yīng)的操作,并把執(zhí)
行結(jié)果返回給 client.

文字太多,不能一一列舉,需要完整電子版的請(qǐng)?jiān)u論666,然后私,信我,即可領(lǐng)取~