天天看點

selenium面試

1、如何去定位屬性動态變化的元素?

 屬性動态變化是指該element沒有固定的屬性值,是以隻能通過相對位置定位 。比如通過xpath的軸, parent/following-sibling/precent-sibling等    另外也可以嘗試findbyelements周遊

2、有幾種元素常用定位方式,分别是?你最偏愛哪一種,為什麼?

8種:id、name、class name、tag name、link text、partial link text、xpath、css selector 

偏愛哪一種?

答:我最常用的是xpath(或CssSelector)因為很多情況下,html标簽的屬性不夠規範,無法通過單一的屬性定位,這個時候就隻能使用xpath可以去重實作定位唯一element事實上定位最快的是Id,

因為id是唯一的,然而大多數開發并沒有設定id。

3、怎麼提高selenium腳本的自動化執行效率?

1、優化測試用例,盡可不使用 sleep,減少使用ImplicitlyWai。

2、多使用selenium的WebDriverWait/FluentWait,這樣可以優化等待時間。

3、減少不必要的操作步驟,如經過三四步才能打開我們要測試的頁面的話,我們就可以直接通過網址來打開,減少不必要的操作。

4、中斷頁面加載,如果頁面加載的内容過多,我們可以檢視一下加載慢的原因,如果加載的内容不影響我們測試,就設定逾時時間,中斷頁面加載。

5、使用性能好的電腦

4、用例在運作過程中經常會出現不穩定的情況,也就是這次可以通過,下次無法通過了,如何提高用例的穩定性?

 1、查找元素前先做判斷:ExpectedConditions裡面的各種方法;

2、顯式等待:多使用WebDriverWait,加上顯式等待時間,等要操作的元素出現之後再執行下面的操作;

3、多用try catch捕獲異常;

4、多線程的時候,減少測試用例耦合度,因為多線程的執行順序是不受控制的;

5、盡量使用測試專用環境,避免其他類型的測試同時進行,對資料造成幹擾。

5、什麼PO模式?

 PO模式是page object model的縮寫,顧名思義, 是一種設計模式,把每個頁面當成一個頁面對象,頁面層寫定位元素方法和頁面操作方法,實作腳本的page和真實的網站頁面Map起來,一一對應起來。這樣能測試架構更容易維護。 比如一個登陸頁面,使用PO模式後,會建立一個class,該class會定義使用者名輸入框,密碼輸入框,登陸按鈕的webElenent;用例層從頁面層調用操作方法,寫成用例,這種模式可以做到定位元素與腳本分離。是以這樣的設計理念就是PO模式。

6、如何設計高品質自動化腳本

 1、 使用四層結構實作業務邏輯、腳本、資料分離。

2、 使用PO設計模式,将一個頁面用到的元素和操作步驟封裝在一個頁面類中。如果一個元素定位發生了改變,我們隻用修改這個頁面的元素屬性。

3、對于頁面類的方法,我們盡量從客戶的正向邏輯去分析,方法中是一個獨立場景,例如:登入到退出,而且不要想着把所有的步驟都封裝在一個方法中。

4、 測試用例設計中,減少測試用例之間的耦合度。

7、什麼是斷言?

斷言的英文是assertion,斷言檢查的英文是assertion checking。

-斷言是指定一個程式必須已經存在的狀态的一個邏輯表達式,或者一組程式變量在程式執行期間的某個點上必須滿足的條件。

8、自動化測試用例從哪裡來?

手工用例中抽取,可以參考自動化用例的執行政策

9、怎樣選擇下拉菜單的元素

下拉菜單分兩種,一種是直接使用select标簽的,這種情況可以直接使用selenium API WebElement selector = driver.findElement(By.id("Selector"));

Select select = new Select(selector);

選擇select的option有以下三種方法selectByIndex(int index) 通過index<br>selectByVisibleText(String text) 通過比對到的可見字元<br>selectByValue(String value) 通過比對到标簽裡的value

10、報NoSuchElementException的原因可能是什麼?

(1)定位iframe中的元素,需switch_to_iframe

  (2)頁面還沒有加載出來就對頁面的元素進行操作,可設定固定休眠時間、implicity_wait()是webDriver提供的逾時等待,隐的等待一個元素被發現或者一個指令完成、WebDriverWait()

  (3)動态屬性無法定位,可根據相對路徑或者部分元素屬性定位。

(4)二次定位(5)有兩個屬性相同的元素,但是其中一個不可見,找到符合這個屬性且style屬性中display=none的元素

(6)xpath描述錯誤

11、Selenium WebDriver –建議使用Webdriver捕獲螢幕快照的方法是什麼?

     import win32com.client   

   shell=win32com.client.Dispatch("WScrip.Shell")

12、如何處理alert彈窗?

我們常見的alert彈窗有兩種:基于windows彈窗和基于web頁面彈窗

我們知道,webdriver是能夠處理alert彈窗的,Selenium提供了Alert這個接口。相關操作代碼如下:

// 切換到Alert

Alert alert = driver.switchTo().alert();

// 點選彈窗上确定按鈕

alert.accept();

// 點選彈窗的取消按鈕

alert.dismiss()

// 擷取彈窗上線上的文本文字内容

alert.getText();

// 有些彈窗還支援文本輸入,這個可以把要輸入字元通過sendkeys方法輸入

alert.sendkeys();

13、XPath中使用單斜杠和雙斜杠有什麼差別?

如果XPath是從文檔節點開始,它将允許建立“絕對”路徑表達式。

例如 “/ html / body / p”比對所有的段落元素。如果XPath在文檔中的任意位置開始進行選擇比對,那麼它将允許建立“相對”路徑表達式。例如 “// p”比對所有的段落元素。

14、當有很多定位器時,如ID、名稱、XPath、CSS定位器,我應該使用哪一個?

  如果有唯一的名稱或辨別符可用,那麼應該使用它們來代替XPath和CSS定位器。如果沒有,那麼CSS定位器應該被優先考慮,因為在大多數現代浏覽器中,它們的評估速度比XPath更快。

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

1. ElementNotSelectableException :元素不能選擇異常

2. ElementNotVisibleException :元素不可見異常

3. NoSuchAttributeException :沒有這樣屬性異常

4. NoSuchElementException:沒有該元素異常

5. NoSuchFrameException :沒有該frame異常

6. TimeoutException : 逾時異常

7. Element not visible at this point  :在目前點元素不可見

16、findElement 和 FindElements有什麼差別?

首先,兩個都是查找元素,都支援八大元素定位方法。findElement()得到的隻有一個元素,如果根據提供的元素定位方式找不到,會報noSuchElement異常

findElements()傳回的是一組元素,是以我們需要根據能夠找到一組元素的表達式去定位,傳回一組元素我們可以放在集合裡,這樣我們就可以使用集合裡面的疊代方法去周遊元素,拿到元素去做其他操作。

17、如何擷取頁面标題,懸浮文本和錯誤文本,并驗證?

标題,我們可以通過driver.getTitle()方法來得到一個字元串,然後使用字元串的containts方法或者equals方法去進行斷言。

懸浮文本(tooltip),一般是利用Actions類,然後滑鼠懸停方法,然後通過getText()方法來得到這個tooltip字元串。

錯誤資訊,直接把這個錯誤字段先進行定位,然後通過getText()方法拿到錯誤文本,主要的斷言有包含,相等,不相等,不包含,以什麼開頭等。

18、在硒中處理多個彈出視窗的機制是什麼?

可以使用指令getWindowHandles()來處理多個彈出視窗。

然後将所有視窗名稱存儲到Set變量中并将其轉換為數組。

接下來,通過使用數組索引,導航到特定的視窗。driver.switchTo.window(ArrayIndex);

19、 隐式等待與顯式等待有什麼不同?

隐式等待是設定的全局等待,

分為1、頁面加載逾時等待 ;2、頁面元素加載逾時;3、異步腳本逾時。

如果是頁面元素逾時,設定等待時間,是對頁面中的所有元素設定加載時間。

隐式等待是其實可以了解成在規定的時間範圍内,浏覽器在不停的重新整理頁面,直到找到相關元素或者時間結束。

顯式等待隻是用于特定搜尋的一個計時器。它的可擴充性更強,你可以設定它來等待任何條件。

通常情況下,可以使用一些預先建構的條件來等待元素變得可點選,可見,不可見等,或者隻是編寫适合需求的條件。

20、關閉浏覽器中quit和close的差別

兩個都可以實作退出浏覽器session功能,close是關閉你目前聚焦的tab頁面,而quit是關閉全部浏覽器tab頁面,并退出浏覽器session。

21、 你寫的測試腳本能在不同浏覽器上運作嗎,支援跨浏覽器平台嗎? 

主要實作這個跨浏覽器的思想就是,把浏覽器類型寫到配置檔案,代碼裡寫if語句去判斷配置檔案的浏覽器的類型,來決定用什麼浏覽器去執行測試用例

22、 一個元素明明定位到了,點選無效(也沒報錯),如果解決?

使用js點選,selenium有時候點選元素是會失效,js = 'document.getElementById("baidu").click()'<br>driver.execute_script(js)

23、 你覺得自動化測試最大的缺陷是什麼?

不穩定,可靠性,不易維護,成本與收益

24、點選登入按鈕的替代方法是什麼?

使用submit()方法,但隻有在屬性type = submit時才能使用它。

25、你如何獲得目前頁面的URL?

driver.driver.current_url

26、 如何從文本框中擷取打字文本?

通過将arg作為值傳遞來使用getAttribute(“value”)方法。

27、selenium中如何保證操作元素的成功率?

添加元素智能等待時間 driver.implicitly_wait(30)

- try 方式進行 id,name,clas,x path, css selector 不同方式進行定位,如果第一種失敗可以自動嘗試第二種Selenium保證元素成功率是通過元素的定位,

當然它的定位方法很多,一定能有合适的。但是在自動化工程的實施過程中,高品質的自動化測試不是隻有測試人員保證的。

需要開發人員規範開發習慣,如給頁面元素加上唯一的name,id等,這樣就能大大地提高元素定位的準确性。

當然如果開發人員開發不規範,我們在定位元素的時候盡量使用相對位址定位,這樣能減少元素定位受頁面變化的影響。

隻要我們元素定位準确,就能保證我的每一個操作符合我的預期

28、如何提高selenium腳本的執行速度?

如網速,操作步驟的繁瑣程度,頁面加載的速度,以及我們在腳本中設定的等待時間,運作腳本的線程數等。

是以不能單方面追求運作速度的,要確定穩定性,能穩定地實作回歸測試才是關鍵。

我們可以從以下幾個方面來提高速度:一,減少操作步驟,如經過三四步才能打開我們要測試的頁面的話,我們就可以直接通過網址來打開,減少不必要的操作。

二,中斷頁面加載,如果頁面加載的内容過多,我們可以檢視一下加載慢的原因,如果加載的内容不影響我們測試,就設定逾時時間,中斷頁面加載。

三,在設定等待時間的時候,可以sleep固定的時間,也可以檢測某個元素出現後中斷等待也可以提高速度。

四,配置testNG實作多線程。在編寫測試用例的時候,一定要實作松耦合,然後在伺服器允許的情況下,盡量設定多線程運作,提高執行速度。

29、什麼是持續內建?

持續內建源于極限程式設計(XP),是一種軟體實踐,軟體開發過程中內建步驟是一個漫長并且無法預測的過程。

內建過程中可能會爆發大量的問題,是以內建過程需要盡可能小而多,實際上持續內建講的是不斷的去做軟體的內建工作。

持續內建,最簡單的形式是包括一個監控版本控制(SVN等等)變化的工具。當變化被發覺時,這個工具可以自動的編譯并測試你的應用

30、 Selenium是否支援桌面應用軟體的自動化測試。

Selenium不支援桌面軟體的自動化測試,Selenium是根據網頁元素的屬性才定位元素,而其他桌面軟體自動化測試工具是根據桌面元素的位置來定位元素,當然現在也有根據桌面元素的屬性來定位的。

31、 BDD是什麼?你了解多少?TDD是什麼?

BDD:行為驅動開發(Behavior Driven Development)

TDD:測試驅動開發(Test-Driven Development)

32、selenium是否可以直接讀取Excel表中測試用例,來執行相關測試

可以的,需要借助第三方庫

33、Selenium有哪些元件?

最早的有Selenium IDE,IDE隻支援安裝在fiefox上一個插件,支援錄制自動化腳本。還有remote RC,和Grid 和webdriver。我們一般最重要的就是使用webdriver。