Selenium憑什麼成為Web自動化測試首選?常見挑戰和解決方案盤點

2020-08-28 Atstudy網校

  Selenium是最流行的web端自動化測試框架之一,用於自動執行用戶對被測產品的操作。Selenium是開源的,Selenium框架的核心組件是Selenium WebDriver。 Selenium WebDriver允許使用者在不同的瀏覽器(例如Chrome,Firefox,Internet Explorer,Microsoft Edge等)上執行測試用例。使用Selenium WebDriver的主要優點是它支持.NET,Java,C#,Python等。可以參考有關Selenium WebDriver體系結構的官方文檔以了解更多信息。

  儘管Selenium簡化了Web網站或Web應用程式的測試,但測試開發人員在使用框架時面臨著許多Selenium自動化挑戰。讓我們看一下Selenium Automation中面臨的一些最常見挑戰及其比較不錯的解決方案。

  誤報成功和誤報失敗

  誤報成功也是測試結果成功的一種情況,即使實際情況並非如此。反之亦然,誤報失敗是測試失敗一種情況,即使一切都按預期進行,測試結果也會報告腳本執行過程中出現錯誤。誤報對自動化測試一直是最大的挑戰,當然Selenium也不例外。

  當測試工程師通過Selenium腳本運行成百上千的測試用例時,可能會遇到一些不穩定的測試,這些測試顯示誤報。如果長時間不處理,可能會導致整個自動化測試項目失去價值,從而使測試人員的自動化測試腳本淪為「廢物」。

  測試腳本的穩定性無疑是Selenium自動化中最常見的挑戰之一。目前通用的解決辦法依然缺少,但從過往工作經驗來看,測試左移,獨立測試環境,統計腳本誤報率等等從流程上來解決這個難題是一個不錯的思路。

  等待網頁加載JavaScript

  現在很多網站包含需要JS異步加載Web元素,例如基於用戶選擇的下拉列表。則Selenium腳本在運行時可能會在這些Web元素時突然失效。發生這種情況是因為WebDriver沒有處理網頁完全加載所花費的時間。為了處理頁面加載的Selenium自動化中的異步加載的問題,需要使WebDriver等到該頁面的完整JavaScript加載完成之後再進行操作。在任何網頁上執行測試之前,您應確保該網頁(尤其是帶有很多JavaScript代碼的網頁)的加載已完成。您可以使用readyState屬性,該屬性描述文檔/網頁的加載狀態。document.readyState狀態為complete表示頁面/文檔的解析已完成。

  &39;&39;&39;

import pytest

  from selenium import webdriver

  from selenium.webdriver.chrome.options import Options

  from selenium.webdriver.common.keys import Keys

  from time import sleep

  from contextlib import contextmanager

  from selenium.webdriver.support.ui import WebDriverWait

  from selenium.webdriver.support.expected_conditions import staleness_of

  @pytest.fixture(params=[&34;],scope=&34;)

  def driver_init(request):

  if request.param == &34;:

  web_driver = webdriver.Chrome()

  request.cls.driver = web_driver

  yield

  web_driver.close()

  @pytest.mark.usefixtures(&34;)

  class BasicTest:

  pass

  class Test_URL(BasicTest):

  def test_open_url(self):

  self.driver.get(&34;)

  print(self.driver.title)

  sleep(5)

  def wait_for_page_load(self, timeout=30):

  old_page = self.driver.find_element_by_id(&39;)

  yield

  WebDriverWait(self.driver, timeout).until(

  staleness_of(old_page)

  )

  def test_click_operation(self):

  39;FREE SIGN UP&34;return document.readyState& 並不完美的方案

  from selenium import webdriver

  import time

  from time import sleep

  driver = webdriver.Firefox()

  driver.get(&34;)

   資源釋放

  driver.close()

  使用Selenium WebDriver動態內容處理此挑戰的更好方法是使用隱式等待或顯式等待,這取決於各自的需求。

  顯式等待處理動態內容

  使用顯式等待,您可以使Selenium WebDriver停止執行並等待直到滿足特定條件。如果您希望設置條件以等待到確切的時間段,則可以將它與thread.sleep()函數一起使用。有多種方法可以實現顯式等待,帶有ExpectedCondition的WebDriver是最受歡迎的選項。

from selenium import webdriver

  from time import sleep

  from selenium.common.exceptions import NoSuchElementException

  from selenium.webdriver.support import expected_conditions as EC

  from selenium.webdriver.common.by import By

  from selenium.common.exceptions import TimeoutException

  from selenium.webdriver.support.ui import WebDriverWait

  driver = webdriver.Firefox()

  driver.get(&34;)

  try:

  myElem_1 = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, &39;)))

  print(&34;)

  myElem_2 = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, &39;)))

  print(&34;)

  myElem_2.click()

  sleep(10)

  34;No element found&34;https://www.*****.com&34;home-btn&34;元素不存在!&34;耗時 &39;-secs&34;create_alert_dialogue()&34;submit&34;測試彈框,請點擊繼續!&34;file://<HTML File location>&34;submit&34;ok,跳過警告框&34;file://<HTML File location>&34;***&34;***&34;submit&39;超時&34;沒有發現警告框&34;http://www.****.com/html/codes/html_popup_window_code.cfm&獲取當前窗口的窗口句柄

  parent_window = driver.window_handles[0]

  print(parent_window)

  39;result1&39;show_iframe&獲取子窗口的句柄

  child_window = driver.window_handles[1]

  子窗口來到前臺

  driver.switch_to.window(child_window)

  title2 = driver.title

  print(title2)

  print(child_window)

  34;__main__":

  unittest.main()

  無法測試行動裝置

  儘管Selenium框架已廣泛用於跨瀏覽器和作業系統的不同組合測試網站或Web應用程式,但該測試仍僅限於非行動裝置。因此,測試針對行動裝置的網站或Web應用程式是Selenium自動化面臨的重大挑戰之一。

  如果對行動應用程式執行測試自動化測試,那麼最著名的開源框架將是Appium。

  無法自動化一切

  100%自動化是一個吹牛的命題。眾所周知的是,並非所有測試方案都可以自動化,因為有些測試需要手動幹預。您需要確定團隊在自動化測試上相對於手動測試應花費的精力的優先級。儘管Selenium框架具有一些功能,可以通過這些功能來截取屏幕截圖,記錄視頻(測試的整體執行情況)以及可視化測試的其他方面,但是將這些功能與可擴展的基於雲的跨瀏覽器測試平臺一起使用可能會具有很大的價值。

  生成測試報告

  任何測試活動的主要目的是發現BUG並改善整體產品。在跟蹤正在執行的測試,生成的輸出和測試結果方面,報告可以發揮主要作用。儘管有可以與pytest和Selenium一起使用的模塊,例如pytest_html(對於Python),但是測試報告中的信息可能並不十分詳盡。Selenium可以使用不同類型的程式語言(例如Java,C#、.Net等)的類似模塊/包,但是這些語言仍然存在相同的問題。收集測試報告是Selenium自動化中的關鍵挑戰之一。

  很多基於Selenium的第三方雲測平臺,還有很多公司基於Selenium開發的自己的報告框架提取,一般來說從以下幾個方面豐富報告信息:

  檢索構建信息,例如構建測試狀態,單個測試狀態,測試運行時間,錯誤和測試日誌

  通過命令獲取屏幕截圖

  瀏覽器環境的詳細信息

  有所不能

  上面提到的是Selenium自動化中的一些常見挑戰,就Selenium而言存在一些限制。只能使用Selenium框架來測試Web應用程式,即不能用於測試基於本地Windows的應用程式。在某些情況下可能需要使用這些場景,出於安全目的,因此自動化測試很難甚至永遠無法繞過一些嚴格身份驗證。

請關注+私信回覆:「測試」就可以免費拿到軟體測試學習資料。

相關焦點

  • Selenium 憑什麼成為 Web 自動化測試的首選?(內附源碼)
    自動化 · 工具1.QTPQTP是一個商業化的功能測試工具,收費,支持web,桌面自動化測試。2.Selenium(文章重點講)Selenium是一個開源的web自動化測試工具,免費,主要做功能測試。3.Robot frameworkRobot framework是一個基於Python可擴展地關鍵字驅動的測試自動化框架。
  • web自動化測試神器——selenium家族介紹
    目前,如果說要進行web自動化 測試,首選的工具基本上都是selenium,那麼selenium到底是什麼呢?1.什麼是seleniumSelenium是基於WEB應用的驗收測試工具集合,直接運行在瀏覽器中,通過一系列命令來模擬用戶操作,Selenium可以將這些命令轉化成實際的HTTP請求在瀏覽器中運行 。
  • Script+Selenium玩轉Web應用自動化測試
    自動化測試在軟體開發過程中, 測試是功能驗收的必要過程, 這個過程往往有測試人員參與, 提前編寫測試用例, 然後再手動對測試用例進行測試, 測試用例都通過之後則可以認為該功能通過驗收.但是軟體中多個功能之間往往存在關聯或依賴關係, 某一個功能的新增或修改可能或影響到其它的功能, 這時就需要測試人員對個軟體的相關或所有功能進行回歸測試, 以便確認系統運行正常, 但是給測試人員增加了很大的工作量.自動化測試是把以人為驅動的測試行為轉化為機器執行的一種過程, 可以解決傳統手工測試中回歸測試工作量大的問題.
  • 學會Python+Selenium,分分鐘搭建Web自動化框架!
    用python+selenium實現UI自動化測試,要有一些HTML和xpth的基礎,當然python基礎一定是必須要會的。筆者建議花點時間了解下相關基礎知識,不至於後面發懵。一、什麼是selenium?selenium是個強大的工具集。支持快速開發測試自動化,支持在多種瀏覽器平臺上執行測試。
  • Python+Selenium自動化測試教程連載(1)
    Selenium是一個自動化工具,它需要綁定某個程式語言,在其中調用WebDriver提供的API實現自動化的效果。作為測試人員選擇程式語言,易學好用這就夠了。2.Python版本介紹目前在用的python穩定版有2.7和3.8。2.7版本作為老版本馬上就不再維護了,一般選擇python3.8最新或較新版本就可以。
  • Selenium ---Web自動化測試的神兵利器,值得收藏!
    Selenium的介紹Selenium是開源的自動化測試工具,它主要是用於Web 應用程式的自動化測試。Selenium 是用於測試 Web 應用程式用戶界面 (UI) 的常用框架。它是一款用於運行端到端功能測試的超強工具。
  • 第一章:Python Selenium 自動化測試入門之漫談
    :自動化測試是把以人為驅動的測試行為轉化為機器執行的一種過程,目的是為了提高效率,提高軟體質量,雖然自動化測試是現在發展的一種趨勢,但是自動化測試並不能完全替代手工測試,也不能說自動化測試就能比手工測試發現更多的bug,目前自動化測試主要是用來做回歸測試。
  • Python之selenium自動化測試
    這幾年,Python真的可以用火爆來形容,尤其在人工智慧、自動化測試領域,風頭大有蓋過java的趨勢。今天我們就來說下使用selenium包下的webdriver自動打開瀏覽器的場景下,如何操作。一、環境準備我們直接先說下mac下chrome的自啟動,預裝環境如下,1、Python3.62、chrome瀏覽器3、pip3裝好selenium命令:sudo pip3 install selenium這裡我們選用的是selenium包,簡單說明下,selenium webdriver是業界通用的測試框架
  • 自動化測試進階課程——Selenium自動化測試通關實戰班
    Selenium不僅可以用多種程式語言編寫測試程序,更能直接跨越各種web瀏覽器和作業系統執行測試;Selenium還是被公認為最實用的自動化測試平臺,因為它的功能很簡單,卻可以提供滿足90% web應用需求的用戶界面。那Selenium自動化測試的該學什麼?從哪裡學起?看Selenium課程視頻學的快,先了解下這份學習大綱。
  • 偷懶大法好,用 selenium 做 web 端自動化測試
    自動化入門介紹實驗介紹本次實驗主要介紹什麼是自動化測試和自動化測試工具 selenium。然後介紹怎麼安裝瀏覽器驅動工具 webdriver,並且開發一個簡單的自動化測試腳本,體會自動化測試是怎麼實現的。
  • 10分鐘玩轉Python+Selenium自動化測試,快速入門通道!
    根據最近面試的情況,把很多同學在實踐selenium的時候沒弄清的問題總結了一下,順便教大家如何快速玩轉selenium!現在測試工程師都在聊什麼?1、python會了嗎最近?2、selenium自動化你們團隊進度怎麼樣?3、你們自動化框架應用得如何?
  • 「RPA」UiPath和Selenium,誰是測試套件?
    自動化測試已經成為各種實體功能背後的驅動力,因為它減少了手工測試的工作量,並且不太容易出錯。自動化可以在早期階段發現錯誤,最重要的是,它促進了批量測試,從而使業務得到前所未有的提升。UiPath測試套件和Selenium是兩個在全球廣泛使用的自動化工具。本文將介紹UiPath如何超越Selenium。 什麼是UiPath測試套件?
  • 新手搭建web自動化遇到的坑,你肯定遇到過!
    新手搭建web自動化遇到的坑,你肯定遇到過!現在自動化測試越來越火,企業在招聘人才的時候明明招的是功能測試。但是面試的時候還是問到了,同學,你會不會自動化呀?不會呀?那可能不是很適合我們這個崗位。然後你的內心os是MLGB,你不是招功能嘛?浪費LZ時間。現實很殘酷,現在測試的要求在不斷提升,不會點自動化還真不好混。
  • 你正在學Web自動化測試?Selenium基本操作你了解嗎?
    Robotframework框架是一個通用的測試框架,它的其中的一個特性是功能全面,能夠支持進行Web自動化測試(通過導入selenium相關測試庫)、GUI測試、接口測試等。 本文主要介紹,在Robotframework測試框架上,實現基於Selenium的Selenium2Library的Web自動化測試。
  • 基於Selenium2和TestNG的自動化測試
    【IT168 技術】Selenium是時下很流行的面向web的自動化測試工具,它以執行效率高,覆蓋的瀏覽器廣泛等優點得到了很多人的親睞。TestNG是一款測試框架,它派生自JUnit和NUnit,除了繼承了兩者的優勢之外,又額外的發展出了一些新的功能,讓其更加強大和易用。
  • 怎麼做Web應用壓力測試?軟體測試解決方案
    文章來源:卓碼軟體測評在眾多軟體測試類別中,Web應用壓力測試是其中基礎的測試工作,常見的軟體壓力測試要關注怎麼給應用進行施壓,正確評估系統存在的瓶頸問題,以及預估系統能夠承載的測試壓力等方面因素。web應用壓力測試也不例外,舉個簡單的例子,線上演唱會門票搶購頁面在面對大量的用戶湧入時系統常常崩潰,讓網友體驗感很差。如何確保系統不崩潰就與做好web應用壓力測試有關了,那麼怎麼做Web應用壓力測試?常規的步驟有哪些呢?
  • 測試基礎:Python+Selenium實現自動化的幾個步驟
    本文以一個頁面例子說明運行自動化腳本需要哪些步驟及實現過程中的報錯匯總。首先需要導入模塊名有些功能selenium框架已經封裝好了,只需要我們直接調用就好。函數from selenium.webdriver.support.select import Select#導入select函數· webdriver驅動:通過webdriver驅動來調用瀏覽器· sleep函數:正常網頁加載過程中,如果不通過時間等待再點擊元素是無法定位到元素,從而報錯,sleep函數是自動化過程中經常用到的功能· ActionChains
  • Selenium自動化測試——框架設計
    本章節將以ECShop用戶註冊、登陸、退出三個業務的巡檢腳本開發、執行為例,介紹如何利用Selenium+Python開展自動化測試。巡檢腳本,可用於冒煙測試,每輪測試開展時,測試工程師可執行巡檢腳本,驗證被測對象常用功能是否正確,如果常用功能存在問題,則無須開展深度測試。
  • Python+Selenium自動化測試教程連載(3)
    上一期介紹了自動化測試Python+Selenium元素定位,這期我們講講元素操作。常用元素操作在一個web網站,我們經常做的操作,無非是點擊,輸入這些。輸入一般是對輸入框輸入。點擊操作多一些:點擊按鈕、超連結,點擊選擇下拉框、單選框、複選框等。那麼通過selenium工具是如何實現這些操作的呢?
  • 你正在學 Web 自動化測試?Selenium 基本操作你了解嘛?|原力計劃
    作者 | 遇上方知友__QAQ責編 | 王曉曼 出品 | CSDN博客在自動化測試中,我們都知道是通過定位元素來實現的,那麼有時候我們定位元素定位不到是為什麼呢?通俗點就是網頁中的嵌套網頁,如果我們在做自動化測試中,需要定位的元素包含在了 iframe 內聯框架裡,那麼我們就需要跳進 iframe ,如果說還需要做後續的操作,但後續的元素不在 iframe 中,這時候就需要再跳出 iframe 。我們現在都知道了什麼是 iframe ,那麼接下來我們拿126郵箱登錄做下示例。