(1)selenium的工作原理?
① 腳本啓動driver
② driver去驅動瀏覽器作爲遠程服務器
③ 執行腳本發送請求
④ 服務器解析請求作出相應操作,並返回給客戶端(腳本)
(2)selenium自動化頁面元素找不到存在異常的原因?
① 元素定位錯誤
② 頁面加載時間過慢,需要查找的元素程序已經完成,單頁面還未加載,此時可以加載頁面等待時間
③ 有可能元素包含在iframe或者frame裏面,需要切換。
(3)如何去定位屬性動態變化的元素?
屬性動態變化是指該element沒有固定的屬性值,只能通過相對位置定位。
第一種方法:用findelements遍歷
第二種方法:通過xpath的軸 parent / following-sibling / precent-sibling
(4)如何去定位頁面上動態加載的元素?
觸發動態事件,繼而findelement;如果是動態菜單,需要一級一級的find。
(5)selenium調用js(execute_script),有哪些場景?
① 對input執行輸入
② 對富文本框的操作
③ 滾動到指定位置操作
(6)selenium如何處理web彈窗?js彈窗?
需要使用driver.switch_to.alert()
(7)selenium可以處理window彈窗嗎?
selenium本身是不可以處理windows彈窗的,但是可以藉助AutoIT小工具來完成對windows彈窗的操作。比如 上傳下載附件等
(8)如何在定位元素後高亮元素(以調試爲目的)?
使用javascript將元素的border或者背景顏色改成黃色或其他顏色即可
(9)selenium是否支持桌面應用軟件的自動化測試?
不支持。selenium是根據網頁元素的屬性來地範圍元素的
(10)selenium是否有讀取excel文件的庫?
沒有,需要藉助第三方工具。例如Apache PIO插件
(11)selenium是否可以向頁面發送鼠標滾輪操作?
不能。
(12)如何在webdriver中調用應用程序?
driver.get('url') 或者 driver.navigate().to('url')
(13)selenium中常見的異常?
NoSuchElementException 找不到頁面元素異常
ElementNoInteractac tableException
(14)selenium爲什麼不推薦使用xpath定位?
selenium使用xpath定位時採用遍歷頁面的方式,性能指標較差。另外xpath定位有通過絕對路徑定位的,有時會不準確;
而用css選擇器定位比較簡潔,運行速度更快,通常用於性能要求嚴格的場景。
(15)如何判斷一個頁面上元素是否存在?
法1:用try...except 在代碼塊加上
法2:用elements定義組元素方法 然後根其元素個數len()<1 存在返回True, 不存在則返回False
法3:結合WebDriverWait和excepted_conditions條件判斷(強烈推薦)
顯示等待,每間隔1秒判斷一次,30秒超時,存在返回True,不存在則返回False
(16)如何定位動態元素?
動態元素有兩種情況:
一個是屬性動態,定位時,若id是動態的,就不要用id定位,用其他定位元素方法
另一個還是這個元素一會在頁面上方,一會在下方,飄忽不定,定位方法也是一樣,根據元素屬性定位(元素的tag name屬性是不會變的,動的只是class屬性和style屬性)
(17)如何通過子元素定位父元素?
通過父元素定位子元素,可以通過二次定位來找到。
第一種:通過子元素定位父元素,selenium提供了parent方法,但是隻能定位到父元素,卻不能獲取元素屬性,也不能操作。
第二種:通過xpath的語法直接定位。 如.//*[@name="hello"]/.. 兩個點代表父級元素。
(18)如何截取一個元素的圖片,不要截取全部圖片?
首選截取當前頁面並自定義保存
然後根據要截取元素圖片的屬性來獲取該元素的座標和大小 ele.location ele.size
然後分別left = ele.location['x']
top = ele.location['y']
right = ele.location['x'] + ele.size['width']
bottom = ele.location['y'] + ele.size['height']
獲取該元素的圖片的座標大小
最後,再次打開剛開始保存的,通過image類中的crop方法(相當於拷貝該元素的一個矩形區域),然後做保存操作就可以了。
(19)一個元素明明定位了,點擊無效(也沒報錯),如何解決?
使用js點擊,selenium有時候點擊元素時會失效
# js 點擊
js = 'document.getElementById('baidu').click()'
driver.execute_script(js)
(20)如何提高腳本的穩定性?
首先只要頁面一直沒變過,說明定位方法是沒問題的。
優化方向:① 自己寫相對路徑,多用id爲節點查找,少用右鍵複製xpath,那種不穩定。
② 第二個影響因素就是等待了,sleep等待儘量少用(影響執行時間)
③ 定位元素方法重新封裝,結合WebDriverWait和excepted_conditions判斷元素方法,自己封裝一套定位元素方法
(21)提高selenium腳本的執行速度方式?
減少不必要的操作。
頁面加載過多並且不影響測試,可設置超時時間中斷頁面加載。
設置等待時間時,可以sleep()固定的時間,檢測到元素出現後中斷等待也可以提高速度。
配置testNG實現多線程,在編寫測試用例時,一定要實現松耦合,在服務器允許的情況下儘量設置多線程運行,提高執行速度。
(22)selenium自動化時,在平時遇到過那些問題?如何解決的?
比如動態id 、有iframe的情況、沒加等待等因素
(23)selenium中隱藏元素定位,你該如何做?
隱藏元素可以正常定位到,只是不能操作(定位元素和操作元素是兩碼事,操作元素是指click 、clear 、send_keys等這些方法)。我們可以用js來操作隱藏元素。js和selenium不同,只有頁面上有的元素(在dom裏面的)都能正常操作。
(24)上傳圖片的幾種方式?
send_keys和AutoIT工具實現
(25)截圖應當怎麼操作?
driver.get_screenshot_as_file('C:\test.jpg')