試用Selenium做網(wǎng)頁自動化測試

突然想試試能否將web測試也自動化摔蓝,經(jīng)過搜索膘侮,發(fā)現(xiàn)了Selenium清女,尤其是支持最愛的Python阳惹,那就是它了!

準備工作

  • CentOS7 + Python2.7 + Pip + Firefox(52版本) + VNCServer + GNOME
  • 使用pip安裝selenium這個package,安裝后看到版本是3.4.1
  • 下載最新的geckodriver-v0.16.1-linux64.tar.gz谍失,解壓后mv到/usr/local/bin
  • Windows + Firefox + Selenium插件,用來獲取參考腳本的

牛刀小試

  • 目標是能實現(xiàn)自動登陸功能莹汤,先在交換機上設置好登陸的用戶名密碼都是admin
  • 在Windows先啟動Firefox快鱼,然后點“工具”,激活Selenium


    se_plugin.png
  • 此時會看到彈出一個小的Firefox窗口纲岭,將它最小化即可


    sese_IDE.png
  • 然后在最初的Firefox網(wǎng)頁輸入交換機管理網(wǎng)址抹竹,然后輸入用戶名和密碼,并點擊登陸
  • 上述操作止潮,都會被記錄到Selenium-IDE里窃判,可以導出Python腳本


    se_export.png
  • 打開就能看到是一個基于unittest框架的testcase
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re

class Login(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "http://10.10.33.115/"
        self.verificationErrors = []
        self.accept_next_alert = True

    def test_login(self):
        driver = self.driver
        driver.get(self.base_url + "/static/switch/index.html#/login")
        driver.find_element_by_id("username").clear()
        driver.find_element_by_id("username").send_keys("admin")
        driver.find_element_by_id("password").clear()
        driver.find_element_by_id("password").send_keys("admin")
        driver.find_element_by_id("submit").click()
    def is_element_present(self, how, what):
        try: self.driver.find_element(by=how, value=what)
        except NoSuchElementException as e: return False
        return True
    
    def is_alert_present(self):
        try: self.driver.switch_to_alert()
        except NoAlertPresentException as e: return False
        return True
    def close_alert_and_get_its_text(self):
        try:
            alert = self.driver.switch_to_alert()
            alert_text = alert.text
            if self.accept_next_alert:
                alert.accept()
            else:
                alert.dismiss()
            return alert_text
        finally: self.accept_next_alert = True
    
    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()
  • 核心代碼肯定是def test_login,非常容易理解
  • 這個腳本就已經(jīng)能夠運行了,會自動啟動

稍微進階

  • 想在能夠自動登陸的基礎上喇闸,可以進入到vlan設置界面去添加vlan
  • 這里走了點彎路袄琳,因為IDE會捕捉我點擊導航欄的動作窿凤,但其實這個是不保險的,最好是登陸后打開對應vlan設置的網(wǎng)址跨蟹,這個是最穩(wěn)的
driver.get(self.base_url + "/static/switch/index.html#/home/srv_mgr/vlan/status")
  • 接下來想抓取表格中的內容,經(jīng)過同事指點橘沥,采用css_selector的方法對table指定表格進行定位
vlan_content = driver.find_element_by_css_selector('table tr:nth-child(2) td:nth-child(4)').txt
  • 得到的vlan_content就可以用assert來做判斷了
  • 另外定位網(wǎng)頁元素窗轩,還可以find_element_by_xpath,有時IDE捕捉到的動作中就包含這個樣式
  • 還需要注意的點是網(wǎng)頁加載是需要時間的座咆,要么判斷elements是否已經(jīng)加載成功痢艺,或者簡單地time.sleep(5)再往下執(zhí)行

多處驗證

  • 交換機無論通過web界面操作還是login用CLI操作,效果應該是一樣并同步的
  • telnet登陸還是用熟悉的pexpect介陶,另外也可以用來check stdout的結果是否和期望一致

后續(xù)工作

如果要把這個框架完善起來堤舒,還需要

  • 將相關參數(shù)放到同一的profile文件中
  • 需要能夠將很多的case連跑
  • 公共部分,例如login web哺呜,可以封裝起來
  • 剩下的就是積累case了
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末舌缤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子某残,更是在濱河造成了極大的恐慌国撵,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玻墅,死亡現(xiàn)場離奇詭異介牙,居然都是意外死亡,警方通過查閱死者的電腦和手機澳厢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門环础,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人剩拢,你說我怎么就攤上這事线得。” “怎么了裸扶?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵框都,是天一觀的道長。 經(jīng)常有香客問我呵晨,道長魏保,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任摸屠,我火速辦了婚禮谓罗,結果婚禮上,老公的妹妹穿的比我還像新娘季二。我一直安慰自己檩咱,他們只是感情好揭措,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刻蚯,像睡著了一般绊含。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炊汹,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天躬充,我揣著相機與錄音,去河邊找鬼讨便。 笑死充甚,一個胖子當著我的面吹牛,可吹牛的內容都是我干的霸褒。 我是一名探鬼主播伴找,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼废菱!你這毒婦竟也來了技矮?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤昙啄,失蹤者是張志新(化名)和其女友劉穎穆役,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梳凛,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡耿币,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了韧拒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淹接。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖叛溢,靈堂內的尸體忽然破棺而出塑悼,到底是詐尸還是另有隱情,我是刑警寧澤楷掉,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布厢蒜,位于F島的核電站,受9級特大地震影響烹植,放射性物質發(fā)生泄漏斑鸦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一草雕、第九天 我趴在偏房一處隱蔽的房頂上張望巷屿。 院中可真熱鬧,春花似錦墩虹、人聲如沸嘱巾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旬昭。三九已至篙螟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間问拘,已是汗流浹背闲擦。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留场梆,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓纯路,卻偏偏與公主長得像或油,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子驰唬,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內容