你正在學 Web 自動化測試?Selenium 基本操作你了解嘛?|原力計劃

2020-12-15 CSDN

作者 | 遇上方知友__QAQ

責編 | 王曉曼

出品 | CSDN博客

在自動化測試中,我們都知道是通過定位元素來實現的,那麼有時候我們定位元素定位不到是為什麼呢?

1、頁面出現了 iframe;

2、出現了新的窗口,沒有實現句柄的切換;

3、三種等待方式,沒有選擇其中之一來使用,元素沒有被加載出來。

iframe

iframe 既是一個內聯框架被用來在當前 HTML 文檔中嵌入另一個文檔。

通俗點就是網頁中的嵌套網頁,如果我們在做自動化測試中,需要定位的元素包含在了 iframe 內聯框架裡,那麼我們就需要跳進 iframe ,如果說還需要做後續的操作,但後續的元素不在 iframe 中,這時候就需要再跳出 iframe 。

我們現在都知道了什麼是 iframe ,那麼接下來我們拿126郵箱登錄做下示例。

我們看看網頁中的 iframe 長什麼樣:

可以清楚的看到,當我把滑鼠放到這裡時,iframe 元素的將整個登錄覆蓋到了,那麼這時候,就需要用到 Iframe 的跳入。

iframe 的跳入,我這裡簡單歸納了三種,其中兩種以126登錄為例,一種為一號店登錄方式為QQ中的帳號密碼登錄。

方式一:

from selenium import webdriver#實例化驅動driver =webdriver.Chrome()#隱式等待:driver.implicitly_wait(20)# 打開網頁:driver.get('https://www.126.com/')#跳進iframe,根據獲取標籤名來通過下標跳進iframes=driver.find_elements_by_tag_name('iframe')driver.switch_to.frame(iframes[0])inputs = driver.find_elements_by_tag_name('input')for i in inputs:if i.get_attribute('placeholder') =='郵箱帳號或手機號碼': i.send_keys('123456')elif i.get_attribute('placeholder') =='輸入密碼': i.send_keys('456789')breakdriver.find_element_by_id('dologin').click()

方式二:

from selenium import webdriver#實例化驅動driver =webdriver.Chrome()#隱式等待:driver.implicitly_wait(20)# 打開網頁:driver.get('https://www.126.com/')#跳進iframe,方式二,逐層定位,跳進iframe,先定為父級唯一元素,再定位包含子元素來跳進divs = driver.find_element_by_id('loginDiv')driver.switch_to.frame(divs.find_element_by_tag_name('iframe'))inputs = driver.find_elements_by_tag_name('input')for i in inputs:if i.get_attribute('placeholder') =='郵箱帳號或手機號碼': i.send_keys('123456')elif i.get_attribute('placeholder') =='輸入密碼': i.send_keys('456789')breakdriver.find_element_by_id('dologin').click()

方式三

因為126登錄中,我嘗試了用 get_attribute 方式來跳進,但是通過獲取 frameborder="0" 這個元素名與值在 iframe 中跳進是不支持的,而且它的其他元素,比如 ID 是自增類型,那麼我們在實際操作中,如果存在很多iframe,但有些元素是唯一的,那麼還是可以更便捷一點,這裡舉例一號店登錄方式中的QQ登錄,以帳戶密碼登錄方式。

from selenium import webdriver#實例化驅動driver = webdriver.Chrome()#隱式等待driver.implicitly_wait(20)#打開126登錄頁面:driver.get('https://passport.yhd.com/passport/login_input.do')#點擊QQ登錄driver.find_element_by_class_name('iconfont').click()#句柄切換:driver.switch_to.window(driver.window_handles[-1])#跳進iframe方式三:先獲取所有的iframe的標籤名iframes = driver.find_elements_by_tag_name('iframe')for i in iframes:#循環查找符合條件的那一組iframeif i.get_attribute('width') =='370':#跳進我想要跳進的iframe driver.switch_to.frame(i)#點擊帳號密碼登錄driver.find_element_by_id('switcher_plogin').click()

跳出 iframe

#跳出iframe: 回到默認的上下文driver.switch_to.default_content()

總結:

其實,只要定位到了 iframe 元素,無論那種方式,都可以跳進或者你有更好的辦法都可以,我相信大家都會有比我更敏捷的方法!

什麼是句柄?

通俗點講,句柄就是瀏覽器中的窗口。我們都知道,一個瀏覽器可以打開很多個頁面,那麼在沒有關閉的情況下,它會一個個展示在瀏覽器的上方,我們可以通過點擊它來切換回歷史打開的窗口。

那麼在自動化測試中,是叫做句柄,也就是說,在打開很多個窗口的時候,我們的測試工具它是不知道具體你要操作的是哪一個窗口?

所以這裡,就涉及到了句柄切換。

這裡也是拿一號店來舉例,我們在進入一號店登錄頁面後,點擊QQ的方式來登錄,就會彈出新的窗口,這時候就需要切換到我們具體想要操作的窗口:

那麼,我想要切進QQ帳號安全登錄應該怎麼做呢?

代碼演示:

from selenium import webdriver#實例化驅動driver = webdriver.Chrome()#隱式等待driver.implicitly_wait(20)#打開126登錄頁面:driver.get('https://passport.yhd.com/passport/login_input.do')#點擊QQ登錄driver.find_element_by_class_name('iconfont').click()#句柄切換: 這裡先是收集所有的窗口,以列表的形式展示wins = driver.window_handles#這裡列印下它(具體操作不需要列印,這裡是為了更直觀的讓您了解它)print(wins) #之後具體切換我們想要的哪一個,比如你想要將操作實時保持在最前,那-1就可以咯driver.switch_to.window(wins[-1])

句柄列印結果:

如果還想要切換回去,那麼你就根據下標來切換就好啦。

Select下拉框

在自動化測試中,我們有三種方法可以進行下拉選擇:

這裡舉例攜程網中國內酒店的三個下拉框:

在下拉框中有三種定位方式:

方式一

代碼展示:

from selenium import webdriver#實例化驅動driver = webdriver.Chrome()#隱式等待driver.implicitly_wait(20)#打開攜程頁面:driver.get('https://www.ctrip.com/')from selenium.webdriver.support.ui import Select #導入Select下拉框#方式一: 根據index下標來選擇房間數:#先定位到房間數fj = driver.find_element_by_id('J_roomCountList')#實例化selectselect1 = Select(fj)#根據下標來選擇房間數為2的 因為第一個下標為0,房間數為1,所以第二個下標為1,房間數為2select1.select_by_index(1)

方式二,根據Value元素值來切換

元素信息展示:

代碼實現

from selenium import webdriver#實例化驅動driver = webdriver.Chrome()#隱式等待driver.implicitly_wait(20)#打開攜程頁面:driver.get('https://www.ctrip.com/')from selenium.webdriver.support.ui import Select#導入Select下拉框#方式二: 根據value值來選擇房間數:#先定位到房間數fj = driver.find_element_by_id('J_roomCountList')#實例化selectselect1 = Select(fj)#根據元素value的值來進行房間數的切換,這裡切換為value值2的,也是#房間數為2select1.select_by_value('2')

方式三

使用 visible_text() 文本信息輸入的方式來進行下拉框選擇:

代碼實現

from selenium import webdriver#實例化驅動driver = webdriver.Chrome()#隱式等待driver.implicitly_wait(20)#打開攜程頁面:driver.get('https://www.ctrip.com/')from selenium.webdriver.support.ui import Select#導入Select下拉框#方式三: 根據文本內容來選擇房間數:#先定位到房間數fj = driver.find_element_by_id('J_roomCountList')#實例化selectselect1 = Select(fj)#複製頁面中的文本信息就可以,使用visible_text方式select1.select_by_visible_text('3間')

Alert彈窗處理

對頁面進行操作後,出現的彈窗提示進行處理。

這裡我拿首頁百度中的----設置—搜索設置–保存設置—對彈窗處理,這一個流程做示例;

首先要懸浮到這個元素:

點擊搜索設置,之後點擊保存設置,對彈窗進行處理。

在Alter中,有兩種處理方式,一個為確定,一個為取消。

對彈出框進行確定操作,代碼演示:

from selenium import webdriver#實例化驅動driver = webdriver.Chrome()#隱式等待driver.implicitly_wait(20)#打開攜程頁面:driver.get('http://www.baidu.com')from selenium.webdriver.common.action_chains import ActionChains #導入滑鼠懸浮模塊#將滑鼠懸浮在設置上set = driver.find_element_by_id('s-usersetting-top')ActionChains(driver).move_to_element(set).perform()#點擊搜索設置driver.find_element_by_class_name('setpref').click()#點擊保存設置driver.find_element_by_class_name('prefpanelgo').click()#對彈窗進行確定操作alert = driver.switch_to.alertalert.accept()

對彈出框做取消操作

代碼演示:

#對彈窗進行取消操作alert = driver.switch_to.alertalert.dismiss()

以上就是Selenium的幾種常見操作整理。

版權聲明:本文為CSDN博主「遇上方知友__QAQ」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_46457203/article/details/106164117

相關焦點

  • 你正在學Web自動化測試?Selenium基本操作你了解嗎?
    Robotframework框架是一個通用的測試框架,它的其中的一個特性是功能全面,能夠支持進行Web自動化測試(通過導入selenium相關測試庫)、GUI測試、接口測試等。 本文主要介紹,在Robotframework測試框架上,實現基於Selenium的Selenium2Library的Web自動化測試。
  • 自動化測試進階課程——Selenium自動化測試通關實戰班
    接觸了不少同行,由於他們之前一直做手工測試,現在很迫切希望做自動化測試,其中不乏工作3年以上的人,但有些初學者很糾結是學QTP還是Selenium,小編是建議學Selenium。Selenium不僅可以用多種程式語言編寫測試程序,更能直接跨越各種web瀏覽器和作業系統執行測試;Selenium還是被公認為最實用的自動化測試平臺,因為它的功能很簡單,卻可以提供滿足90% web應用需求的用戶界面。那Selenium自動化測試的該學什麼?從哪裡學起?看Selenium課程視頻學的快,先了解下這份學習大綱。
  • web自動化測試神器——selenium家族介紹
    目前,如果說要進行web自動化 測試,首選的工具基本上都是selenium,那麼selenium到底是什麼呢?1.什麼是seleniumSelenium是基於WEB應用的驗收測試工具集合,直接運行在瀏覽器中,通過一系列命令來模擬用戶操作,Selenium可以將這些命令轉化成實際的HTTP請求在瀏覽器中運行 。
  • 偷懶大法好,用 selenium 做 web 端自動化測試
    怎麼學習自動化測試寫好自動化測試的前提是有夯實的手工測試基礎,學習自動化測試的基本路線大致如下:1. 做好手工功能測試(包括測試理論知識,涉及的工具使用等)。2. 學習前端基本知識(HTML、CSS、JavaScript)。3.
  • Selenium 憑什麼成為 Web 自動化測試的首選?(內附源碼)
    自動化 · 工具1.QTPQTP是一個商業化的功能測試工具,收費,支持web,桌面自動化測試。2.Selenium(文章重點講)Selenium是一個開源的web自動化測試工具,免費,主要做功能測試。3.Robot frameworkRobot framework是一個基於Python可擴展地關鍵字驅動的測試自動化框架。
  • Selenium憑什麼成為Web自動化測試首選?常見挑戰和解決方案盤點
    Selenium是最流行的web端自動化測試框架之一,用於自動執行用戶對被測產品的操作。Selenium是開源的,Selenium框架的核心組件是Selenium WebDriver。 Selenium WebDriver允許使用者在不同的瀏覽器(例如Chrome,Firefox,Internet Explorer,Microsoft Edge等)上執行測試用例。
  • 第一章:Python Selenium 自動化測試入門之漫談
    :自動化測試是把以人為驅動的測試行為轉化為機器執行的一種過程,目的是為了提高效率,提高軟體質量,雖然自動化測試是現在發展的一種趨勢,但是自動化測試並不能完全替代手工測試,也不能說自動化測試就能比手工測試發現更多的bug,目前自動化測試主要是用來做回歸測試。
  • Python+Selenium自動化測試教程連載(1)
    3.Selenium介紹Selenium官網:https://selenium.dev/ Selenium是一個開源的WEB自動化測試工具,不少學習功能自動化的同學開始首選selenium,因為它相比商用自動化工具UFT有諸多點: 1.開源免費
  • 學會Python+Selenium,分分鐘搭建Web自動化框架!
    用python+selenium實現UI自動化測試,要有一些HTML和xpth的基礎,當然python基礎一定是必須要會的。筆者建議花點時間了解下相關基礎知識,不至於後面發懵。一、什麼是selenium?selenium是個強大的工具集。支持快速開發測試自動化,支持在多種瀏覽器平臺上執行測試。
  • 新手搭建web自動化遇到的坑,你肯定遇到過!
    新手搭建web自動化遇到的坑,你肯定遇到過!現在自動化測試越來越火,企業在招聘人才的時候明明招的是功能測試。但是面試的時候還是問到了,同學,你會不會自動化呀?不會呀?那可能不是很適合我們這個崗位。然後你的內心os是MLGB,你不是招功能嘛?浪費LZ時間。現實很殘酷,現在測試的要求在不斷提升,不會點自動化還真不好混。
  • 在做自動化測試之前,你必須要知道這些
    選擇什麼工具進行自動化測試 假如你已經確認了某項目適合做自動化測試,那麼接下來你要做的就是選測試工具了。首先要先確認你所測試的產品是桌面程序(C/S)還是web應用(B/S)。如果,被測產品是B/S 結構,那麼推薦selenium ,為什麼不是QTP 或其它工具?因為selenium 對B/S應用支持很好,更重要的一點,它支持多語言的開發,真正的使用selenium ,你所要掌握的不僅僅是一個工具而已,你還需要學習一門語言。我為什麼要選擇selenium?還要學一門語言,這無疑增加了我的學習成本。
  • Selenium ---Web自動化測試的神兵利器,值得收藏!
    Selenium的介紹Selenium是開源的自動化測試工具,它主要是用於Web 應用程式的自動化測試。Selenium 是用於測試 Web 應用程式用戶界面 (UI) 的常用框架。它是一款用於運行端到端功能測試的超強工具。
  • Script+Selenium玩轉Web應用自動化測試
    自動化測試在軟體開發過程中, 測試是功能驗收的必要過程, 這個過程往往有測試人員參與, 提前編寫測試用例, 然後再手動對測試用例進行測試, 測試用例都通過之後則可以認為該功能通過驗收.但是軟體中多個功能之間往往存在關聯或依賴關係, 某一個功能的新增或修改可能或影響到其它的功能, 這時就需要測試人員對個軟體的相關或所有功能進行回歸測試, 以便確認系統運行正常, 但是給測試人員增加了很大的工作量.自動化測試是把以人為驅動的測試行為轉化為機器執行的一種過程, 可以解決傳統手工測試中回歸測試工作量大的問題.
  • Python之selenium自動化測試
    這幾年,Python真的可以用火爆來形容,尤其在人工智慧、自動化測試領域,風頭大有蓋過java的趨勢。今天我們就來說下使用selenium包下的webdriver自動打開瀏覽器的場景下,如何操作。一、環境準備我們直接先說下mac下chrome的自啟動,預裝環境如下,1、Python3.62、chrome瀏覽器3、pip3裝好selenium命令:sudo pip3 install selenium這裡我們選用的是selenium包,簡單說明下,selenium webdriver是業界通用的測試框架
  • 測試老鳥教你5步走,分分鐘玩轉UI自動化測試
    自動化好像是測試行業永恆不變的熱點話題,同時也是測試行業爭議最大的話題。不知道現在還有多少言論說自動化沒有用的,也有不少人在爭論自動化的價值和作用,但其實自動化在各行各業都已經如火如荼的發展了,想必在測試行業也必然是大趨勢。
  • 測試基礎:Python+Selenium實現自動化的幾個步驟
    首先需要導入模塊名有些功能selenium框架已經封裝好了,只需要我們直接調用就好。函數from selenium.webdriver.support.select import Select#導入select函數· webdriver驅動:通過webdriver驅動來調用瀏覽器· sleep函數:正常網頁加載過程中,如果不通過時間等待再點擊元素是無法定位到元素,從而報錯,sleep函數是自動化過程中經常用到的功能· ActionChains
  • 第二章:Python Selenium 自動化測試之selenium IDE 入門
    selenium IDE簡介:一個Firefox插件,需要額外安裝,可以錄製用戶的基本操作,生成測試用例。隨後可以運行這些測試用例在瀏覽器裡回放,可將測試用例轉換為其他語言的自動化腳本。運行所有:運行一個測試案例集中的所有案例。4.運行:運行當前選定的測試案例。5.錄製:點擊之後,開始記錄你對瀏覽器的操作。6.案例集列表。7.當選中前命令對應參數。
  • 10分鐘玩轉Python+Selenium自動化測試,快速入門通道!
    最近瀏覽了很多同學的簡歷,大部分都有自動化測試,基本都有selenium。但很少有人真正弄清selenium。一個是selenium的提供了很多組件,讓人容易上手,然後很多人就沒有然後了。二是selenium的更新伴隨著工具的合併,很多人壓根沒高清自己用的是selenium RC 還是 webdriver。
  • Selenium 3 發布計劃
    Selenium 將會定位為「一個 user-focused 的移動端和 web 應用的自動化測試工具」Selenium 會提供移動端的測試套件,提高不同項目的互操作性,擴展 WebDriver API。Appium,ios-driver 和 selendroid 的項目開發者將會參與這部分的開發。
  • 又到雙11,教你用selenium自動秒搶淘寶商品
    selenium是一款web自動化測試工具,可以很方便地模擬真實用戶對瀏覽器進行操作,它支持各種主流瀏覽器:IE、Chrome、Firefox、Safari、Opera等。有多種程式語言的客戶端驅動,編寫自動化腳本語法簡潔,其中python的selenium庫便非常的受歡迎。