Selenium面試題+答案

• Selenium是否支持桌面應用軟件的自動化測試

Selenium不支持桌面應用軟件的自動化測試,Selenium是通過操作HTML頁面中的DOM樹上的節點進行模擬用戶行爲,暫時不支持桌面應用

 

• Selenium是否支持用例的執行的引擎。

selenium只是一個用來操作HTML頁面元素的庫,並不支持用例的執行引擎,python中需要使用unittest 或pytest 等測試框架完成用例的執行的引擎。

 

• Seleinum是否有讀取excel文件的庫

selenium無讀取excel文件的庫,我一般使用openpyxl 庫進行excel的讀寫操作

 

• Selenium有哪些組件? 

Selenium的組件有Selenium Grid(用於調度),webdriver(用於生成對應的瀏覽器實例,進行模擬用戶瀏覽操作),Selenium IDE(瀏覽器錄製回放)

 

• Selenium有什麼限制或者缺陷

Selenium只能完成瀏覽器或者移動端基於DOM元素的操作,無報告,用例執行引擎等功能

 

• 在selenium中,有哪些不同定位元素方法

id/xpath/name/link_text/className/PartialLinkText/CSS selector,測試腳本編寫過程中使用最多的xpath,css這兩種

 

• 什麼是imlicitlyWait (隱式等待)

全局只需設置一次,元素或腳本執行的結果在設定的最長時間內出現則返回,未出現則在最長時間後拋出找不到元素的異常

 

• 什麼是expliciteWait (顯式等待)

一般設置兩個參數,一個爲最長時間,一個爲間隔輪詢時間,例如WebDriverWait(10,0.5).until(...),則代表每間隔0.5s查詢一次元素是否出現,出現則返回,未出現則間隔0.5s後再查找一次。10s後仍未找到則拋出找不到元素異常

 

• 什麼是線程等待(硬式等待)

time.sleep(3) 強制當前線程等待3s後再繼續執行。

 

• 什麼是pollingEvery

python 的selenium中未發現這個,可能是指WebDriverWait中的poll_frequency參數

 

• 你寫的測試腳本能在不同瀏覽器上運行嗎,支持跨瀏覽器平臺嗎

支持,在初始化driver的時候使用不同的Webdriver即可,我使用pytest做自動化測試時通過定義addoption方法,在pytest啓動時根據傳參不同,調用不同的瀏覽器

 

• 什麼是POM,爲什麼要使用它

PageObjectModel,頁面對象模型,將頁面映射成代碼中的類,頁面上的元素映射成類中的屬性,頁面上的操作映射成類的方法,使用POM在進行測試用例編寫時只需要調用在頁面類中定義好的方法即可,頁面發生變動只需修改維護對應頁面類中的屬性或方法即可,無需修改測試用例,減少因頁面頻繁變動而造成的大量維護成本。

 

• 在你做自動化過程中,遇到了什麼問題嗎?舉例下

在做UI自動化時,數據的前置我通過接口進行生成,接口返回成功了,但是真正到頁面上可查詢存在一個時間差,導致case運行失敗,我通過參考顯示等待的方式,在頁面上操作接口生成的數據無法找到時,同樣使用類似輪詢的機制,未找到,則刷新頁面再找,直到超時時間內找到未知,再繼續執行後續的case操作。

有些手工操作時單擊的操作通過代碼單擊會報元素不可點擊,使用雙擊解決。

UI運行受客戶端環境影響較大,我使用docker selenium,保證了每次運行的瀏覽器實例都是新的無污染。

 

• 舉例一下你遇到過那些異常,在selenium自動化測試

超時,元素不可點擊,未找到元素,元素沒有某個屬性

 

• 如何處理alert彈窗

a =driver.switch_to.alert
a.accept()
a.dismiss()
a.text

 

• 在selenium中如何處理多窗口?

driver.window_handles #獲取窗口列表
driver.switch_to.windows(windows_name)

 

• 你查找元素遇到過在Frame裏面嗎?你是如何處理

暫時沒遇到,driver.switch_to.fram(id/name/索引)

 

• Frame裏面元素定位的?

切換至Frame內後繼續操作即可

 

• 怎麼驗證勾選框是enable/disabled/checked/Unchecked/ displayed/not displayed?

ele=driver.find_element((locator,value))
ele.is_displayed()
ele.is_enabled()
ele.is_selected()

 

• 如何處理下拉菜單?

我的項目中下拉框是div+li組成的下拉框,無法使用selenium中的select類提供的方法,我通過點擊下拉框,喚出菜單,然後使用xpath,定位文本內容進行內容選擇點擊操作

 

• 在日曆這種web表單你是如何處理的?

日曆表單如果可點擊,可以使用點擊操作,如果不可點擊可使用driver.execute(js代碼),進行賦值操作(據反饋目前一些日曆表單可能需要鍵盤操作配合纔可以)

 

• 關閉瀏覽器中quit和close的區別

close只是關閉窗口,session連接並沒有關閉,瀏覽器進程仍然處於運行狀態,quit是斷開session連接,瀏覽器進程關閉

 

• 在Selenium中如何實現截圖,如何實現用例執行失敗才截圖

driver.get_screenshot_as_png()

在用例執行時進行try expect 異常捕獲,expect時截圖

 

• 在Selenium中如何實現拖拽滾動條?

使用js進行拖拽,滾動至頂部:driver.execute("windows.scrollTo(0,0)")

 

• 如何實現文件上傳? 

文件上傳若是input類型的可嘗試使用send_keys() 方法(據反饋VUE組件中input類型爲file的以無法使用send_keys方法)

其它類型需使用藉助第三方實現.

 

• 如何處理“不受信任的證書”的問題? 

# Firfox
profile = webdriver.FirefoxProfile()
profile.accept_untrusted_certs = True
driver = webdriver.Firefox(firefox_profile=profile)
# Chrome
options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
driver = webdriver.Chrome(chrome_options=options)
# IE
capabilities = webdriver.DesiredCapabilities().INTERNETEXPLORER
capabilities['acceptSslCerts'] = True
driver = webdriver.Ie(capabilities=capabilities)

 

• 如何實現鼠標懸停,鍵盤事件和拖拽動作?

使用ActionChains類的方法

click(on_element=None) ——單擊鼠標左鍵
click_and_hold(on_element=None) ——點擊鼠標左鍵,不鬆開
context_click(on_element=None) ——點擊鼠標右鍵
double_click(on_element=None) ——雙擊鼠標左鍵
drag_and_drop(source, target) ——拖拽到某個元素然後鬆開
drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某個座標然後鬆開
key_down(value, element=None) ——按下某個鍵盤上的鍵
key_up(value, element=None) ——鬆開某個鍵
move_by_offset(xoffset, yoffset) ——鼠標從當前位置移動到某個座標
move_to_element(to_element) ——鼠標移動到某個元素
move_to_element_with_offset(to_element, xoffset, yoffset) ——移動到距某個元素(左上角座標)多少距離的位置
perform() ——執行鏈中的所有動作release(on_element=None) ——在某個元素位置鬆開鼠標左鍵
send_keys(*keys_to_send) ——發送某個鍵到當前焦點的元素
send_keys_to_element(element, *keys_to_send) ——發送某個鍵到指定元素

使用Keys類實現鍵盤事件:

ele.send_keys(Keys.CONTROL,'x') #實現"CTRL + X"

 

• 如何獲取頁面標題,懸浮文本和錯誤文本,並驗證?

assert driver.title == 'xx標題'

懸浮文本和錯誤文本可以使用ActionChains().move_to_element() 然後ele.text

 

• 在selenium自動化測試中,你-般完成什麼類型的測試?

迴歸測試

 

• 你是如何管理你的測試用例並執行?

測試用例按照業務模塊劃分成以test開頭的py文件,pytest測試框架可識別以test開頭或結尾的測試類或方法或文件,運行在根目錄執行pytest 即可,當需要指定較多的參數或需要其他操作時定義run入口文件,直接運行run文件即可

 

• 關於自動化測試報告生成?

使用的是pytest-html庫生成html報告及allure

 

• 你如何用Selenium測試?

將基礎通用操作封裝成base類,然後頁面對象模型繼承Base類。

 

• 如何解決問題?

針對UI自動化中遇到的問題,先查看報錯信息,定位是自己封裝問題則修改封裝,非自己代碼問題則先看實現相關功能模塊依賴庫的官方說明文檔,官方文檔中未解決問題,若是開源庫則對應github參考查看issue欄目,最後再百度或谷歌

 

• 你是怎麼開發測試框架的? 

 

 

 

• 做自動化測試的目的?

接口自動化測試可儘快介入項目測試,在聯調前發現編碼中的問題,在版本更新發布後即進行接口自動化可對既有功能進行驗證,保證此次新功能或bug修復對原有功能無影響。UI自動化可減少手工操作,進行兼容性測試。加快版本更新發布進度

 

• 如何判斷case是否通過?

接口的case 根據規定的響應狀態碼 + 接口響應的值 + db 中對應的數據變化進行判斷

UI的case 根據業務場景進行後頁面上的變動及相關特定提示語 ,也同樣可根據db中的數據狀態進行判斷

 

• 你項目中有多少case,通過率怎麼樣?

UI的case 單次運行目前通過率大約在95% 以上,通過加入失敗重試機制後大約98%-99%左右

 

• 失敗截圖的原理是什麼?

我在框架中使用driver.get_screenshot_as_png() 方法在Base類中使用try expect在expect時即調用截圖方法

 

 

 

• 報告哪裏來,主要統計什麼?

使用第三方庫實現,統計用例成功失敗,跳過,條數,運行時間、環境等

 

 

• 寫出selenium中你最熟悉的接口或者類

 WebDriverWait:顯示等待的類

 webdrier.Chrome:實例化Chrome driver實例

 

• Xpath是什麼?

一門查找XML文檔中信息的語言

 

• findElement()和findElements()方法有什麼區別

前者返回一個WebElement對象,後者返回一個由WebElement 組成的list

 

• 登錄按鈕除了click方法還有其他方式嗎?

driver.submit()

 

• 怎麼對含有驗證碼的功能進行自動化測試

簡單驗證碼使用PIL庫進行解決,過於複雜,識別難度過高與開發溝通使用通用驗證碼,或者使用第三方服務提供的圖片識別服務

 

• 舉一個WebDriver中方 法重載的例子

webdriver.Chrome() 的__init__方法即重載了RemoteWebDriver的__init__方法

 

• 你如何模擬瀏覽器的前後移動?

driver.forward()

driver.back()

 

• 你如何獲得當前頁面的URL?

driver.current_url

 

 

• 如何從文本框中獲取打字文本?

ele.text

 

• 你如何清除中文本框的內容?

ele.clear()

 

原文地址:http://www.grassroadsz.top/article/selenium_know/

 

--------------------------------------------------------------------------------

關注微信公衆號(測試工程師小站)即可在手機上查閱,並可接收更多測試分享,發送【測試資料】更可獲取百G測試教程~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章