測(cè)試面試題集-UI自動(dòng)化測(cè)試

16
2020-10
今天距2021年76天
這是ITester軟件測(cè)試小棧第165次推文

點(diǎn)擊上方藍(lán)字“ITester軟件測(cè)試小棧“關(guān)注我,每周一、三、五早上?08:30準(zhǔn)時(shí)推送,每月不定期贈(zèng)送技術(shù)書(shū)籍。
微信公眾號(hào)后臺(tái)回復(fù)“資源”、“測(cè)試工具包”領(lǐng)取測(cè)試資源,回復(fù)“微信群”一起進(jìn)群打怪。
本文2533字,閱讀約需7分鐘
id:根據(jù)id來(lái)獲取元素,返回單個(gè)元素,id值一般是唯一的;
name:根據(jù)元素的name屬性定位;
tagName:根據(jù)元素的標(biāo)簽名定位;
className:根據(jù)元素的樣式class值定位;
linkText:根據(jù)超鏈接的文本值定位;
partialLinkText:根據(jù)超鏈接的部分文本值定位;
cssSelector:css選擇器定位;
xpath:通過(guò)元素的路徑來(lái)定位;
強(qiáng)制等待:也叫線程等待, 通過(guò)線程休眠的方式完成的等待,如等待5秒: Thread sleep(5000),一般情況下不太使用強(qiáng)制等待,主要應(yīng)用的場(chǎng)景在于不同系統(tǒng)交互的地方。
隱式等待:通過(guò)implicitly Wait完成的延時(shí)等待,注意這種是針對(duì)全局設(shè)置的等待,如設(shè)置超時(shí)時(shí)間為10秒,使用了implicitlyWait后,如果第一次沒(méi)有找到元素,會(huì)在10秒之內(nèi)不斷循環(huán)去找元素,如果超過(guò)10秒還沒(méi)有找到,則拋出異常,硬式等待比較智能,它可以通過(guò)全局配置,但是只能用于元素定位。
顯式等待:也稱為智能等待,針對(duì)指定元素定位指定等待時(shí)間,在指定時(shí)間范圍內(nèi)進(jìn)行元素查找,找到元素則直接返回,如果在超時(shí)還沒(méi)有找到元素,則拋出異常,顯示等待是 selenium 當(dāng)中比較靈活的一種等待方式,他的實(shí)現(xiàn)原理其實(shí)是通過(guò) while 循環(huán)不停的嘗試需要進(jìn)行的操作。
driver.navigate().back();?//后退
driver.navigate().forward();//前進(jìn)
driver.navigate().refresh();//刷新
如果是input元素的文件上傳,可以通過(guò) Selenium 當(dāng)中的 send_keys 方式進(jìn)行傳遞,但是這種方式局限性比較大,如果遇到像通過(guò) js 調(diào)用的組件會(huì)有一些問(wèn)題;這個(gè)時(shí)候就需要通過(guò)一些和系統(tǒng)交互的方式去完成上傳操作,比如通過(guò)autoit,pywinauto 或者是pyautogui這些第三方庫(kù)進(jìn)行操作。
UI自動(dòng)化測(cè)試用例是從手工測(cè)試用例中提取出來(lái)的,跟手工測(cè)試用例相比,自動(dòng)化測(cè)試用例更加注重用例的嚴(yán)謹(jǐn)性,選擇用例的時(shí)候遵循以下原則:
優(yōu)先選取覆蓋產(chǎn)品核心功能的用例;
從成本考量,不要選擇流程過(guò)于復(fù)雜的用例;
選取的用例可以是重復(fù)執(zhí)行,繁瑣的部分,比如字段驗(yàn)證、提示信息驗(yàn)證;
優(yōu)先實(shí)現(xiàn)正向的測(cè)試用例,反向用例一般情況復(fù)雜、數(shù)量多;
PO模式,全稱為Page Object Model ,簡(jiǎn)稱POM,是頁(yè)面對(duì)象模式。對(duì)頁(yè)面進(jìn)行抽象或者說(shuō)建模的過(guò)程,是把一個(gè)具體的頁(yè)面轉(zhuǎn)化為編程語(yǔ)言當(dāng)中的一個(gè)對(duì)象,頁(yè)面特性轉(zhuǎn)化成對(duì)象屬性,頁(yè)面操作轉(zhuǎn)化為對(duì)象方法。把頁(yè)面的一個(gè)個(gè)的web元素設(shè)計(jì)為頁(yè)面對(duì)象的屬性,把頁(yè)面上的操作(如點(diǎn)擊、輸入等)設(shè)計(jì)為頁(yè)面對(duì)象的行為。在自動(dòng)化測(cè)試當(dāng)中,主要用來(lái)實(shí)現(xiàn)對(duì)頁(yè)面操作和測(cè)試邏輯的一個(gè)分離,這樣做的好處是業(yè)務(wù)和實(shí)現(xiàn)分開(kāi),使自動(dòng)化測(cè)試腳本具備更高的可維護(hù)性。
公共方法表示頁(yè)面提供的一個(gè)服務(wù),比如我們可以把登錄封裝成一個(gè) login 方法,把搜索方法封裝成一個(gè)設(shè)施方法,把注冊(cè)操作封裝成一個(gè) register 的方法;
盡量不要暴露頁(yè)面的內(nèi)部,比如一個(gè)HTML的頁(yè)面還有一個(gè)頁(yè)面的上下結(jié)構(gòu);
在 PO 當(dāng)中一般不做斷言,會(huì)做到頁(yè)面邏輯和測(cè)試邏輯的分離;
PO 一般里面的方法返回 self 或者是其他的 Page Object ,也可以是一個(gè)元素屬性;
整個(gè) PO 不需要封裝整個(gè)頁(yè)面的行為,用到什么邏輯就封裝什么;
對(duì)于統(tǒng)一操作,如果出現(xiàn)不同的結(jié)果,可以把用不同的方法來(lái)表示,比如說(shuō)登錄成功有跳轉(zhuǎn),登錄失敗有報(bào)錯(cuò),如果登錄還有一種會(huì)授權(quán)的狀況,那么可以封裝成三個(gè)單獨(dú)的方法:login success、login error、login invalid。
盡量用相對(duì)路徑的xpath表達(dá)式;
查找元素優(yōu)先用顯示等待;
用例與用例之間盡量避免產(chǎn)生依賴,用例可以獨(dú)立執(zhí)行;
用例執(zhí)行結(jié)束后對(duì)測(cè)試場(chǎng)景進(jìn)行還原,避免影響其他用例的執(zhí)行;
腳本執(zhí)行失敗后加入重試機(jī)制,提升用例的穩(wěn)定性;
盡量保證單獨(dú)的測(cè)試環(huán)境,避免其他的測(cè)試同步進(jìn)行;
Selenium Grid,分布式執(zhí)行用例; Appium 使用 STF 管理多設(shè)備; Docker+K8S 管理集群;



