1斧拍、selenium中如何判斷元素是否存在酒奶?
- isElementPresent
2删咱、selenium中hidden或者是display = none的元素是否可以定位到屑埋?
- 不能
3、selenium中如何保證操作元素的成功率痰滋?也就是說如何保證我點(diǎn)擊的元素一定是可以點(diǎn)擊的摘能?
- 添加元素智能等待時(shí)間 driver.implicitly_wait(30)
- try 方式進(jìn)行 id,name,clas,x path, css selector 不同方式進(jìn)行定位,如果第一種失敗可以自動(dòng)嘗試第二種
-Selenium保證元素成功率是通過元素的定位即寡,當(dāng)然它的定位方法很多徊哑,一定能有合適的。但是在自動(dòng)化工程的實(shí)施過程中聪富,高質(zhì)量的自動(dòng)化測試不是只有測試人員保證的莺丑。需要開發(fā)人員規(guī)范開發(fā)習(xí)慣,如給頁面元素加上唯一的name,id等墩蔓,這樣就能大大地提高元素定位的準(zhǔn)確性梢莽。當(dāng)然如果開發(fā)人員開發(fā)不規(guī)范,我們在定位元素的時(shí)候盡量使用相對地址定位奸披,這樣能減少元素定位受頁面變化的影響昏名。只要我們元素定位準(zhǔn)確,就能保證我的每一個(gè)操作符合我的預(yù)期
4阵面、如何提高selenium腳本的執(zhí)行速度轻局?
- Selenium腳本的執(zhí)行速度受多方面因素的影響,如網(wǎng)速样刷,操作步驟的繁瑣程度仑扑,頁面加載的速度,以及我們在腳本中設(shè)置的等待時(shí)間置鼻,運(yùn)行腳本的線程數(shù)等镇饮。所以不能單方面追求運(yùn)行速度的,要確保穩(wěn)定性箕母,能穩(wěn)定地實(shí)現(xiàn)回歸測試才是關(guān)鍵储藐。
我們可以從以下幾個(gè)方面來提高速度:
一俱济,減少操作步驟,如經(jīng)過三四步才能打開我們要測試的頁面的話钙勃,我們就可以直接通過網(wǎng)址來打開蛛碌,減少不必要的操作。
二肺缕,中斷頁面加載左医,如果頁面加載的內(nèi)容過多,我們可以查看一下加載慢的原因同木,如果加載的內(nèi)容不影響我們測試浮梢,就設(shè)置超時(shí)時(shí)間,中斷頁面加載彤路。
三秕硝,在設(shè)置等待時(shí)間的時(shí)候,可以sleep固定的時(shí)間洲尊,也可以檢測某個(gè)元素出現(xiàn)后中斷等待也可以提高速度远豺。
四,配置testNG實(shí)現(xiàn)多線程坞嘀。在編寫測試用例的時(shí)候躯护,一定要實(shí)現(xiàn)松耦合,然后在服務(wù)器允許的情況下丽涩,盡量設(shè)置多線程運(yùn)行棺滞,提高執(zhí)行速度。
5矢渊、用例在運(yùn)行過程中經(jīng)常會(huì)出現(xiàn)不穩(wěn)定的情況继准,也就是說這次可以通過,下次就沒辦法通過了矮男,如何去提升用例的穩(wěn)定性移必?
- time.sleep( )
- driver.implicitly_wait(30)
- 多用 try 捕捉,處理異常
-此時(shí)我們要分析出不穩(wěn)定的原因毡鉴,然后有針對性的去解決問題崔泵。主要有以下幾個(gè)方面 :
一,網(wǎng)速問題:有的時(shí)候網(wǎng)頁加載的比較慢猪瞬,在程序執(zhí)行的時(shí)候要操作的元素沒有顯示出來管削。這種情況比較常見,運(yùn)行一次網(wǎng)速好的時(shí)候通過了撑螺,再運(yùn)行一次,頁面沒有打開崎弃,就不通過了甘晤。為了提高穩(wěn)定性含潘,我們只能犧牲運(yùn)行時(shí)間了,在經(jīng)常檢測失敗的元素前加上等待時(shí)間线婚,等要操作的元素出現(xiàn)之后再執(zhí)行下面的操作遏弱。
二,Selelnium的原因:Selenium1.0和2.0還是有區(qū)別的塞弊,有些兒函數(shù)在2.0下運(yùn)行確實(shí)有時(shí)而有效漱逸,時(shí)面無效。如果mouseover()函數(shù)游沿,就是這種情況饰抒, 我們需要避免使用這類的函數(shù)。
三诀黍,多線程的時(shí)候袋坑,測試用例間相互影響。雖然多線程的時(shí)候運(yùn)行速度比較快眯勾,但是如果用例之間的耦合性沒有設(shè)計(jì)好枣宫,也會(huì)影響的,如果用例A先于用例B執(zhí)行的時(shí)候吃环,就會(huì)影響到用例B也颤;反之則沒有問題。這種情況郁轻,如果你的自動(dòng)化測試工程打算多線程的時(shí)候翅娶,提前就要把測試用例測試的耦合度比較松,盡量沒有任何關(guān)系范咨,因?yàn)槎嗑€程的執(zhí)行順序是不受控制的故觅。
6、你的自動(dòng)化用例的執(zhí)行策略是什么渠啊?
- 自動(dòng)化測試用例的執(zhí)行策略是要看自動(dòng)化測試的目的输吏,通常有如下幾種策略:
一,自動(dòng)化測試用例是用來監(jiān)控的替蛉,在此目的下贯溅,我們就把自動(dòng)化測試用例設(shè)置成定時(shí)執(zhí)行的,如果每五分鐘或是一個(gè)小時(shí)執(zhí)行一次躲查,在jenkins上創(chuàng)建一個(gè)定時(shí)任務(wù)即可它浅。
二,必須回歸的用例镣煮。有些兒測試用例姐霍,如BVT測試用例,我們在公司產(chǎn)品任何變動(dòng)上線之前都需要回歸執(zhí)行。那我們就把測試用例設(shè)置成觸發(fā)式執(zhí)行镊折,在jenkins上將我們的自動(dòng)化測試任務(wù)綁定到開發(fā)的build任務(wù)上胯府。當(dāng)開發(fā)人員在仿真環(huán)境上部代碼的時(shí)候,我們的自動(dòng)化測試用例就會(huì)被觸發(fā)執(zhí)行恨胚。
三骂因,不需要經(jīng)常執(zhí)行的測試用例。像全量測試用例赃泡,我們沒有必要一直回歸執(zhí)行寒波,必竟還是有時(shí)間消耗的,有些非主要業(yè)務(wù)線也不需要時(shí)時(shí)回歸升熊。這類測試用例我們就采用人工執(zhí)行俄烁,在jenkins創(chuàng)建一個(gè)任務(wù),需要執(zhí)行的時(shí)候人工去構(gòu)建即可僚碎。
7猴娩、什么是持續(xù)集成?
- 持續(xù)集成源于極限編程(XP)勺阐,是一種軟件實(shí)踐卷中,[軟件開發(fā)過程中集成步驟是一個(gè)漫長并且無法預(yù)測的過程。集成過程中可能會(huì)爆發(fā)大量的問題渊抽,因此集成過程需要盡可能小而多蟆豫,實(shí)際上持續(xù)集成講的是不斷的去做軟件的集成工作。持續(xù)集成懒闷,最簡單的形式是包括一個(gè)監(jiān)控版本控制(SVN等等)變化的工具十减。當(dāng)變化被發(fā)覺時(shí),這個(gè)工具可以自動(dòng)的編譯并測試你的應(yīng)用愤估。
8帮辟、自動(dòng)化測試的時(shí)候是不是需要連接數(shù)據(jù)庫做數(shù)據(jù)校驗(yàn)?
- UI自動(dòng)化不需要
- 接口測試會(huì)需要
9玩焰、id,name,class,xpath, css selector這些屬性由驹,你最偏愛哪一種,為什么昔园?
- css 蔓榄、xpath 幾乎所有的元素都可以定位到
10、如何去定位頁面上動(dòng)態(tài)加載的元素默刚?
- 觸發(fā)動(dòng)態(tài)加載元素的事件甥郑,直至動(dòng)態(tài)元素出現(xiàn),進(jìn)行定位
11荤西、如何去定位屬性動(dòng)態(tài)變化的元素澜搅?
- xpath或者css通過同級伍俘、父級、子級進(jìn)行定位
12店展、點(diǎn)擊鏈接以后养篓,selenium是否會(huì)自動(dòng)等待該頁面加載完畢?
- 會(huì)的
13赂蕴、webdriver client的原理是什么?
通過研究selenium-webdriver的源碼舶胀,筆者發(fā)現(xiàn)其實(shí)webdriver的實(shí)現(xiàn)原理并不高深莫測無法揣度概说。在這里以webdriver ruby binding的firefox-webdriver實(shí)現(xiàn)為例,簡單介紹一下webdriver的工作原理嚣伐。
當(dāng)測試腳本啟動(dòng)firefox的時(shí)候糖赔,selenium-webdriver 會(huì)首先在新線程中啟動(dòng)firefox瀏覽器。如果測試腳本指定了firefox的profile轩端,那么就以該profile啟動(dòng)放典,否則的話就新啟1個(gè)profile,并啟動(dòng)firefox基茵;
firefox一般是以-no-remote的方法啟動(dòng)奋构,啟動(dòng)后selenium-webdriver會(huì)將firefox綁定到特定的端口,綁定完成后該firefox實(shí)例便作為webdriver的remote [<u>server</u>](javascript:;)存在拱层;
客戶端(也就是測試腳本)創(chuàng)建1個(gè)session弥臼,在該session中通過http請求向remote server發(fā)送restful的請求,remote server解析請求根灯,完成相應(yīng)操作并返回response径缅;
客戶端接受response,并分析其返回值以決定是轉(zhuǎn)到第3步還是結(jié)束腳本烙肺;
這就是webdriver的工作流程纳猪,看起來很復(fù)雜實(shí)際上當(dāng)了解了webdriver的實(shí)現(xiàn)原理后,理解上述問題應(yīng)該比較簡單桃笙。
webdriver是按照server – client的經(jīng)典設(shè)計(jì)模式設(shè)計(jì)的氏堤。
server端就是remote server,可以是任意的瀏覽器怎栽。當(dāng)我們的腳本啟動(dòng)瀏覽器后丽猬,該瀏覽器就是remote server,它的職責(zé)就是等待client發(fā)送請求并做出相應(yīng)熏瞄;
client端簡單說來就是我們的測試代碼脚祟,我們測試代碼中的一些行為,比如打開瀏覽器强饮,轉(zhuǎn)跳到特定的url等操作是以http請求的方式發(fā)送給被 測試瀏覽器由桌,也就是remote server;remote server接受請求,并執(zhí)行相應(yīng)操作行您,并在response中返回執(zhí)行狀態(tài)铭乾、返回值等信息;
14娃循、webdriver的協(xié)議是什么炕檩?
-The WebDriver Wire Protocol
15、啟動(dòng)瀏覽器的時(shí)候用到的是哪個(gè)webdriver協(xié)議捌斧?
-http
16笛质、什么是page object設(shè)計(jì)模式?
-http://www.cnblogs.com/tsbc/p/4080301.html
相似功能地方捞蚂,代碼基本都是一樣的妇押,界面元素?fù)Q個(gè)查找方式,把原來的使用 xpath方式姓迅,改為使用 id 查找敲霍,需要對每個(gè)用例腳本都要改,雖然幾個(gè)用例看不出什么工作量丁存,但是重復(fù)findElement的代碼肩杈,已經(jīng)讓我們感到了代碼的笨重。如果某些定位發(fā)生了改變柱嫌,我們就得貫穿整個(gè)測試代碼進(jìn)行調(diào)整元素定位锋恬,這樣就會(huì)導(dǎo)致我們的腳本在后期,難以維護(hù)编丘。因此通過Page Object Model 我們可以創(chuàng)建更加健壯代碼与学,并減少或者消除重復(fù)的測試代碼,從而也能夠提高代碼的可讀性嘉抓,減少編寫腳本的工作量索守。Page Object Model的實(shí)現(xiàn),就是通過分離測試對象和測試腳本的抽象來實(shí)現(xiàn)的抑片。
17卵佛、什么是page factory設(shè)計(jì)模式?
- http://relevantcodes.com/pageobjects-and-pagefactory-design-patterns-in-selenium/
18敞斋、怎樣去選擇一個(gè)下拉框中的value=xx的option截汪?
-二次定位
19、如何在定位元素后高亮元素(以調(diào)試為目的)植捎?
-重置元素屬性衙解,給定位的元素加背景、邊框
20焰枢、什么是斷言蚓峦?
-斷言的英文是assertion舌剂,斷言檢查的英文是assertion checking。
-斷言是指定一個(gè)程序必須已經(jīng)存在的狀態(tài)的一個(gè)邏輯表達(dá)式暑椰,或者一組程序變量在程序執(zhí)行期間的某個(gè)點(diǎn)上必須滿足的條件霍转。
21、如果你進(jìn)行自動(dòng)化測試方案的選型一汽,你會(huì)選擇哪種語言避消,java,js角虫,python還是ruby沾谓?
-使用自己熟悉的語言
22、page object設(shè)置模式中戳鹅,是否需要在page里定位的方法中加上斷言?
-不需要
23昏兆、page object設(shè)計(jì)模式中枫虏,如何實(shí)現(xiàn)頁面的跳轉(zhuǎn)?
-get爬虱、click (可能有坑)
24隶债、自動(dòng)化測試用例從哪里來?
-手工用例中抽取
-可以參考自動(dòng)化用例的執(zhí)行策略
25跑筝、你覺得自動(dòng)化測試最大的缺陷是什么死讹?
-不穩(wěn)定
-可靠性
-不易維護(hù)
-成本與收益
26、什么是分層測試曲梗?
還是自己理解吧
27赞警、webdriver可以用來做接口測試嗎?
-有難度虏两,不推薦
28愧旦、get和post 的區(qū)別?(感覺可能答案不對)
-因?yàn)槭褂肎ET請求不會(huì)產(chǎn)生什么動(dòng)作定罢。不會(huì)產(chǎn)生動(dòng)作意味著GET的HTTP請求不會(huì)在服務(wù)器上產(chǎn)生任何結(jié)果笤虫。但是安全方法并不是什么動(dòng)作都不產(chǎn)生,這里的安全方法僅僅指不會(huì)修改信息祖凫。POST可能會(huì)修改服務(wù)器上的資源的請求琼蚯。比如CSDN的博客,用戶提交一篇文章或者一個(gè)讀者提交評論是通過POST請求來實(shí)現(xiàn)的惠况,因?yàn)樵偬峤晃恼禄蛘咴u論提交后資源(即某個(gè)頁面)不同了遭庶,或者說資源被修改了。
兩種請求方式的區(qū)別:
1售滤、GET請求罚拟,請求的數(shù)據(jù)會(huì)附加在URL之后台诗,以?分割URL和傳輸數(shù)據(jù),多個(gè)參數(shù)用&連接赐俗。URL的編碼格式采用的是ASCII編碼拉队,而不是uniclde,即是說所有的非ASCII字符都要編碼之后再傳輸阻逮。
POST請求:POST請求會(huì)把請求的數(shù)據(jù)放置在HTTP請求包的包體中粱快。上面的item=bandsaw就是實(shí)際的傳輸數(shù)據(jù)。因此叔扼,GET請求的數(shù)據(jù)會(huì)暴露在地址欄中事哭,而POST請求則不會(huì)。
2瓜富、傳輸數(shù)據(jù)的大小
在HTTP規(guī)范中鳍咱,沒有對URL的長度和傳輸?shù)臄?shù)據(jù)大小進(jìn)行限制。但是在實(shí)際開發(fā)過程中与柑,對于GET谤辜,特定的瀏覽器和服務(wù)器對URL的長度有限制。因此价捧,在使用GET請求時(shí)丑念,傳輸數(shù)據(jù)會(huì)受到URL長度的限制。
對于POST结蟋,由于不是URL傳值脯倚,理論上是不會(huì)受限制的,但是實(shí)際上各個(gè)服務(wù)器會(huì)規(guī)定對POST提交數(shù)據(jù)大小進(jìn)行限制嵌屎,Apache推正、IIS都有各自的配置。
3编整、安全性
POST的安全性比GET的高
29舔稀、公司內(nèi)一直在使用的測試系統(tǒng)(B/S架構(gòu))突然不能訪問了,需要你進(jìn)行排查并恢復(fù)掌测,說出你的檢查方法
答:
一内贮、網(wǎng)站輸入域名直接無法訪問,網(wǎng)站之前還正常汞斧,突然就無法訪問
1. 測試FTP是否正骋褂簦可以登錄,不能登錄的直接問空間商那是空間商的問題直接聯(lián)系他們粘勒。
2. 空間贈(zèng)送的三級域名是否能夠訪問網(wǎng)站打開網(wǎng)站(空間都贈(zèng)送三級域名)竞端,如果也不能訪問應(yīng)該是空間問題。
3. 在電腦的開始菜單運(yùn)行中輸入cmd庙睡,在彈出的黑框中輸入:ping 你的域名事富;然后回車技俐,如果看不到IP或IP地址與你的主機(jī)地址不符,則說明域名解析有誤,是域名的問題得重新解析域名统台。
二雕擂、訪問報(bào)404錯(cuò)誤(無法找到該頁)。說明是網(wǎng)站內(nèi)容都正常是程序出現(xiàn)問題贱勃,看看程序是否完整井赌。
三、訪問網(wǎng)站出現(xiàn)[<u>MySQL</u>](javascript:;) Server Error 這個(gè)是數(shù)據(jù)庫鏈接錯(cuò)誤贵扰,查看數(shù)據(jù)庫連接文件和數(shù)據(jù)庫是不是錯(cuò)誤仇穗。
四、訪問網(wǎng)站出現(xiàn)500錯(cuò)誤戚绕。
1. 請登錄FTP查看是否多了異常文件或丟失文件纹坐,說明網(wǎng)站被侵入了,馬上聯(lián)系網(wǎng)站制作進(jìn)行進(jìn)行排查故障舞丛。
2. 如果空間且FTP程序目錄沒有缺失文件或剛剛安裝就出現(xiàn)500錯(cuò)誤恰画,請確認(rèn)空間已開啟scandir()函數(shù),查看是不是禁止了這個(gè)函數(shù)瓷马。
曾經(jīng)夢想仗劍走天涯,然而bug太多跨晴,沒時(shí)間去
參考鏈接
http://www.51testing.com/html/20/n-4463720.html?nomobile=1#