selenium+python實(shí)現(xiàn)用戶登錄的自動(dòng)化測試代碼

代碼的目錄結(jié)構(gòu)如下:

目錄結(jié)構(gòu).jpg

測試的對象是本地安裝的禪道系統(tǒng):

禪道.jpg

測試的結(jié)果如下:

郵件.jpg
報(bào)告.jpg

以下是測試代碼:

driver.py

from selenium import webdriver
'''啟動(dòng)不同的瀏覽器啟動(dòng)'''
def browser():
    driver=webdriver.Chrome("D:\Google\Chrome\Application\chromedriver.exe")
    # driver=webdriver.Firefox()
    # driver=webdriver.ie()
    # driver.get('http://www.baidu.com')
    return  driver
if __name__ == '__main__':
    browser()

function,py

'''工具方法模塊(截圖猜极,查找最新報(bào)告兄淫、郵件發(fā)送)'''
import os
import time
from selenium import webdriver
import smtplib                                  #發(fā)送郵件模塊
from email.mime.text import MIMEText           #定義郵件內(nèi)容
from email.header import Header                #定義郵件標(biāo)題

#截圖方法
def insert_img(driver,filename):
   # 獲取當(dāng)前模塊所在路徑
   print(__file__)
   func_path=os.path.dirname(__file__)
   print('func_path is %s'%func_path)
   #獲取上一級目錄
   base_dir=os.path.dirname(func_path)
   print("base_dir is %s" %base_dir)
   base_dir=str(base_dir)
   print(base_dir)
   # 獲取項(xiàng)目文件的根目錄路徑
   base=base_dir.split('/website')[0]
   print(base)
   # 指定截圖存放路徑
   filepath=base+'/website/test_report/report/'+filename
   print(filepath)
   driver.get_screenshot_as_file(filepath)

def latest_report(report_dir):
    lists=os.listdir(report_dir)
    print(lists)
    lists.sort()
    print('file is :%s'%lists[-1])
    file=os.path.join(report_dir,lists[-1])
    fi=str(file)
    print('latest file is: %s'%fi)
    return file

#將測試報(bào)告發(fā)送到郵件
def send_email(latest_report):
        print('func_py latest report is %s'%latest_report)
        f=open(latest_report,'rb')
        mail_content=f.read()
        # 發(fā)送郵箱服務(wù)器
        smtpserver = 'smtp.163.com
        # 發(fā)送郵箱用戶名密碼
        user = '*********@163.com'
        password = '********'
        # 發(fā)送和接收郵箱
        sender = '*****@163.com'
        receives = [ '****@qq.com']
        # 發(fā)送郵件主題和內(nèi)容
        subject = '自動(dòng)化測試報(bào)告郵箱發(fā)送'
        msg = MIMEText(mail_content,'html','utf-8')
        msg['Subject'] = Header(subject,'utf-8')
        msg['From'] = sender
        msg['To'] = ','.join(receives)

        smtp = smtplib.SMTP_SSL(smtpserver, 465)
        smtp.helo(smtpserver)
        smtp.ehlo(smtpserver)
        smtp.login(user, password)
        print("Start send email..." )
        # smtp.sendmail(sender,receives,msgRoot.as_string())
        smtp.sendmail(sender, receives, msg.as_string())
        smtp.quit()
        print("Send email end!")

if __name__ == '__main__':
    # send_multi_email()
    driver = webdriver.Chrome("D:\Google\Chrome\Application\chromedriver.exe")
    driver.get("http://www.sogou.com")
    time.sleep(2)
    insert_img(driver, "sogou.png")
    driver.close()

myuint.py


import unittest
from driver import driver
'''用例運(yùn)行前后的環(huán)境準(zhǔn)備工作'''
class StartEnd(unittest.TestCase):
    def setUp(self):
        self.driver=driver.browser()
        self.driver.implicitly_wait(10)
        self.driver.maximize_window()

    def tearDown(self):
        self.driver.close()

BasePage.py

'''頁面基類'''
from time import sleep

class  Page():

    def __init__(self,driver):
        self.driver=driver
        self.base_url='http://127.0.0.1:8080/'
        self.timeout=20

    def _open(self,url):
        url_=self.base_url+url
        print('url is %s'%url_)
        self.driver.maximize_window()
        self.driver.get(url_)
        sleep(2)
        assert self.driver.current_url == url_,'did not land on %s'%url_

    def open(self):
        self._open(self.url)

    def find_element(self,*loc):
         return self.driver.find_element(*loc)

login_page.py


from BasePage import *
from selenium import webdriver
from selenium.webdriver.common.by import By

class Login_Page(Page):
    '''登錄頁面'''
    url='zentao/user-login.html'
    # 定位器——對相關(guān)元素進(jìn)行定位
    username_loc=(By.ID,'account')
    password_loc=(By.NAME,'password')
    submit_loc=(By.ID,'submit')

    def type_username(self,uname):
        self.find_element(*self.username_loc).clear()
        self.find_element(*self.username_loc).send_keys(uname)

    def type_password(self,pw):
        self.find_element(*self.password_loc).clear()
        self.find_element(*self.password_loc).send_keys(pw)

    def click_submit(self):
        self.find_element(*self.submit_loc).click()

    def login_action(self,uname,pw):
        self.open()
        self.type_username(uname)
        self.type_password(pw)
        self.click_submit()

    Login_pass_loc=(By.ID,'companyname')
    Login_fail_loc=(By.LINK_TEXT,'忘記密碼')

    def type_login_pass_hint(self):
        return self.find_element(*self.Login_pass_loc).text

    def type_login_fail_hint(self):
        return  self.find_element(*self.Login_fail_loc).text

# if __name__=='__main__':
#     driver=webdriver.Chrome("D:\Google\Chrome\Application\chromedriver.exe")
#     po=Login_Page(driver)
#     po.login_action('admin','Aa1234')

test_login.py


'''
?   用戶名密碼正確點(diǎn)擊登錄
?   用戶名正確,密碼錯(cuò)誤點(diǎn)擊登錄
?   用戶名和密碼為空點(diǎn)擊登錄
'''
import  unittest
from   website.testcase.model  import function,myuinit
from  website.testcase.page_object.login_page import *
from time import sleep

class LoginTest(myuinit.StartEnd):

    def test_login1_normal(self):
        '''用戶名悬嗓、密碼正確'''
        print("test_login1_normal is start run...")
        po=Login_Page(self.driver)
        po.login_action('admin','Aa1234')
        sleep(3)

        self.assertEqual(po.type_login_pass_hint(),'易軟天創(chuàng)項(xiàng)目管理系統(tǒng)')
        function.insert_img(self.driver,'login_success.png')
        print("test_login1_normal is test end!")

    @unittest.skip('skp this case')
    def test_login2_password_error(self):
        '''用戶名正確,密碼錯(cuò)誤'''
        print("test_login1_password error is start run...")
        po=Login_Page(self.driver)
        po.login_action('admin','Aa123456')
        sleep(3)

        self.assertEqual(po.type_login_pass_hint(),'易軟天創(chuàng)項(xiàng)目管理系統(tǒng)')
        function.insert_img(self.driver,'login_success.png')
        print("test_login1_normal is test end!")


    @unittest.skip('skip this case')
    def test_login3_empty(self):
        '''用戶名传货、密碼為空'''
        print("test_login1_normal is start run...")
        po=Login_Page(self.driver)
        po.login_action('admin','Aa1234')
        sleep(3)

        self.assertEqual(po.type_login_pass_hint(),'易軟天創(chuàng)項(xiàng)目管理系統(tǒng)')
        function.insert_img(self.driver,'login_success.png')
        print("test_login1_normal is test end!")

if __name__=='__main__':
    unittest.main()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末备韧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子片排,更是在濱河造成了極大的恐慌,老刑警劉巖速侈,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件率寡,死亡現(xiàn)場離奇詭異,居然都是意外死亡倚搬,警方通過查閱死者的電腦和手機(jī)冶共,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捅僵,你說我怎么就攤上這事家卖。” “怎么了庙楚?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵上荡,是天一觀的道長。 經(jīng)常有香客問我馒闷,道長酪捡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任纳账,我火速辦了婚禮逛薇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疏虫。我一直安慰自己永罚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布卧秘。 她就那樣靜靜地躺著呢袱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪翅敌。 梳的紋絲不亂的頭發(fā)上产捞,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機(jī)與錄音哼御,去河邊找鬼。 笑死焊唬,一個(gè)胖子當(dāng)著我的面吹牛恋昼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赶促,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼液肌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鸥滨?” 一聲冷哼從身側(cè)響起嗦哆,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎婿滓,沒想到半個(gè)月后老速,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凸主,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年橘券,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡旁舰,死狀恐怖锋华,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情箭窜,我是刑警寧澤毯焕,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站磺樱,受9級特大地震影響纳猫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坊罢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一续担、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧活孩,春花似錦物遇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至起趾,卻和暖如春诗舰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背训裆。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工眶根, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人边琉。 一個(gè)月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓属百,卻偏偏與公主長得像,于是被迫代替她去往敵國和親变姨。 傳聞我的和親對象是個(gè)殘疾皇子族扰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 乘著改革開放的浪潮,這段時(shí)間我們終于接觸到非扯ㄅ罚火熱的前端項(xiàng)目構(gòu)架React+Redux渔呵。 這個(gè)構(gòu)架下的前端項(xiàng)目,最...
    大大灰灰狼閱讀 4,853評論 5 10
  • 共修功課第十六天:婚姻是責(zé)任跟平衡砍鸠,面對現(xiàn)實(shí)的問題扩氢,你是否承擔(dān)起自己的責(zé)任,平衡到彼此之間的關(guān)系呢爷辱? 引導(dǎo):婚姻是...
    王大梁_9fb7閱讀 227評論 1 1
  • 近來都淹沒在戀戀紅塵之中类茂,呵呵耍属!基本上恢復(fù)到原來比較“正常”的樣子巩检,點(diǎn)開簡書厚骗,可以說是無字可寫… 人生之所有,一切...
    鳳凰未涅槃閱讀 203評論 0 1
  • 讀書的時(shí)候兢哭,一邊啜著什么含在嘴中會是一個(gè)很奇妙的過程领舰。例如,之前有段時(shí)間迟螺,我總喜歡在看書的時(shí)候拆開一包糖果冲秽,每翻看...
    瓶蓋閱讀 283評論 0 1