selenium 資料驅動框架自動化從0到1--3

zhangguangyi520發表於2020-11-13

selenium 資料驅動框架自動化從0到1–3

上一篇我們沒有把鏈路上的頁面封裝完,這篇繼續封裝,上一篇封裝後的程式碼如下:

#encoding = utf-8

from appModules.loginAction import *
from util.openBrowser import *

#建立chrome瀏覽器例項
driver = OpenBrowser()
lg = LoginAction()
lg.login(driver,'abc_123456qwe','abc_123456')

#獲取通訊錄按鈕單擊
getElement(driver,'xpath','//div[text()="通訊錄"]').click()
#獲取新建聯絡人按鈕單擊
sleep(3)
getElement(driver,'xpath','//span[text()="新建聯絡人"]').click()
#獲取姓名輸入框
sleep(3)
name = getElement(driver,'xpath',"//a[@title ='編輯詳細姓名']/preceding-sibling::div/input")
#輸入框輸入名字
name.send_keys('我是誰')
#獲取電子郵箱輸入框
sleep(3)
email = getElement(driver,'xpath','//div[@id="iaddress_MAIL_wrap"]//dd//div//input')
#電子郵箱輸入
email.send_keys('1322432@126.com')
#獲取是否是星標朋友單擊
sleep(3)
getElement(driver,'xpath','//span[text()="設為星標聯絡人"]/preceding-sibling::span/b').click()
#獲取電話號碼輸入框
sleep(3)
phon = getElement(driver,'xpath','//div[@id="iaddress_TEL_wrap"]//dd//div//input')
#輸入電話號碼
phon.send_keys('13523232323')
#獲取備註輸入框輸入備註
sleep(3)
common = getElement(driver,'xpath',"//textarea[@id='input_DETAIL']").send_keys('測試驗證')
#獲取確定按鈕單擊儲存
sleep(3)
buton = getElement(driver,'xpath','//span[text()="確 定"]').click()
#斷言我是誰是否新增成功
sleep(10)
assert u'我是誰' in driver.page_source

#退出瀏覽器
driver.quit()



二,封裝登陸後頁面元素程式碼

1,在pageObjects包下建立一個homePage.py 檔案,程式碼如下:

#encoding = utf-8

from util.getObjectMap import *

class HomePage(object):
    def __init__(self,driver):
        self.driver = driver

    def  addressBook(self):
        try:
            #獲取通訊錄按鈕元素物件
            element = getElement(self.driver,'xpath','//div[text()="通訊錄"]')
            return element
        except Exception as e:
            raise e

if __name__ =='__main__':
    from util.openBrowser import *
    from appModules.loginAction import LoginAction
    driver = OpenBrowser()   #建立瀏覽器例項
    lg=LoginAction()    #建立登入頁面例項
    lg.login(driver,'abc_123456qwe','abc_123456')  #登入
    hg = HomePage(driver)  #建立home 頁面例項
    hg.addressBook().click() #點選通訊錄按鈕
    driver.quit()  #退出


三,封裝新增聯絡人頁面元素程式碼

1,在pageObjects包下建立一個addContactPersonPage.py 檔案,程式碼如下:

#encoding = utf-8

from util.getObjectMap import *

class AddContactPensonPage(object):
    def __init__(self,driver):
        self.driver = driver

    def addContactPersonButton(self):
        try:
            #獲取新增聯絡人按鈕元素物件返回給呼叫者
            element = getElement(self.driver,'xpath','//span[text()="新建聯絡人"]')
            return element
        except Exception as e:
            raise e

    def userName(self):
        try:
            #獲取新建聯絡人姓名元素物件返回給呼叫者
            element = getElement(self.driver,'xpath','//a[@title="編輯詳細姓名"]/preceding-sibling::div/input')
            return element
        except Exception as e:
            raise e

    def userPersonEmail(self):
        try:
            #獲取新建聯絡人電子郵箱元素物件返回給呼叫者
            element = getElement(self.driver,'xpath','//div[@id="iaddress_MAIL_wrap"]//dd/div//input')
            return element
        except Exception as e:
            raise e

    def isStar(self):
        try:
            #獲取是否是星標朋友的元素物件返回給呼叫者
            element = getElement(self.driver,'xpath','//span[text()="設為星標聯絡人"]/preceding-sibling::span/b')
            return element
        except Exception as e:
            raise e

    def userPersonPhon(self):
        try:
            #獲取聯絡人手機號碼元素物件返回給呼叫者
            element = getElement(self.driver,'xpath','//div[@id="iaddress_TEL_wrap"]//dd/div//input')
            return element
        except Exception as e:
            raise e

    def userPersonComment(self):
        try:
            #獲取備註元素物件返回給呼叫者
            element = getElement(self.driver,'xpath','//textarea[@id="input_DETAIL"]')
            return element
        except Exception as e:
            raise e

    def saveButton(self):
        try:
            #獲取確定按鈕元素物件返回給呼叫者
            element = getElement(self.driver,'xpath','//span[text()="確 定"]')
            return element
        except Exception as e:
            raise e

if __name__ =='__main__':
    from util.openBrowser import *
    from appModules.loginAction import LoginAction
    from pageObjects.homePage import *
    from time import sleep
    driver = OpenBrowser()  #建立瀏覽器例項
    lg = LoginAction()      #建立登入頁面例項
    lg.login(driver,'abc_123456qwe','abc_123456') #登入
    hg = HomePage(driver)   #建立home頁面例項
    hg.addressBook().click() #點選通訊錄按鈕
    cp=AddContactPensonPage(driver)  #建立新增聯絡人頁面元素例項
    cp.addContactPersonButton().click()  #點選新增聯絡人按鈕
    sleep(3)
    cp.userName().send_keys('xinzeng')   #姓名輸入
    sleep(3)
    cp.userPersonEmail().send_keys('14432@163.com') #電子郵箱輸入
    cp.isStar().click()   #點選星標按鈕
    cp.userPersonPhon().send_keys('12345324323')  #輸入電話
    cp.userPersonComment().send_keys('gdgfghgfh')  #輸入備註
    cp.saveButton().click()  #點選確定
    sleep(3)
    assert u'xinzeng' in driver.page_source  #斷言xinzeng 是否新增完成
    sleep(2)
    driver.quit()  #退出

2,在appModules包下建立一個addContactPersonAction.py 檔案,封裝新增聯絡人頁面程式碼如下

#encoding = utf-8

from pageObjects.addContactPersonPage import AddContactPensonPage
from pageObjects.homePage import HomePage
import traceback
import time

class AddContactPersonAction(object):
    def __init__(self):
        print('開始新增聯絡人')

    @staticmethod
    def addContactPerson(driver,userName,userEmail,isStar,userPhon,userComment):
        try:
            hp = HomePage(driver)   #獲取home頁面元素的例項
            hp.addressBook().click()  #點選通訊錄按鈕
            cp = AddContactPensonPage(driver)  #獲取聯絡人頁面元素例項
            cp.addContactPersonButton().click()  #點選新增聯絡人按鈕
            time.sleep(2)
            if userName:
                cp.userName().send_keys(userName)   #輸入姓名
                cp.userPersonEmail().send_keys(userEmail)  #輸入email
            if  isStar =='y':
                cp.isStar().click()   #判斷是不是星標,是點選按鈕
            if userPhon:
                cp.userPersonPhon().send_keys(userPhon)  #輸入電話
            if userComment:
                cp.userPersonComment().send_keys(userComment)  #輸入備註
            cp.saveButton().click()  #點選提交
            time.sleep(3)
            assert userName in driver.page_source  #斷言新增的聯絡人是否新增成功
            driver.quit() #退出
        except Exception as e:
            print(traceback.print_exc()) #列印堆疊資訊
            raise e
if __name__ =='__main__':
    from util.openBrowser import *
    from appModules.loginAction import *
    driver = OpenBrowser()  #例項化瀏覽器物件
    lg = LoginAction()  #例項化登入頁面物件
    lg.login(driver,'abc_123456qwe','abc_123456')  #登入
    cp=AddContactPersonAction()  #例項化新增聯絡人頁面
    #新增聯絡人
    cp.addContactPerson(driver,'sd','131243@163.com','y','12345345432','dsfds')


總結

於是乎,上一篇的程式碼就變成下面這樣了
是不是乾淨利落了,但還是沒有把元素表示式,測試資料和程式碼分離,只是把相關模組封裝了一下(初步框架),這樣難於管理,如果開發稍微改動,我們就會花很多時間去修改維護,這不是我們想要的。下一篇我們先把頁面元素表示式和程式碼分離

#encoding = utf-8

from appModules.addContactPersonAction import AddContactPersonAction
from pageObjects.homePage import *
from appModules.loginAction import *
from util.openBrowser import *

#建立chrome瀏覽器例項
driver = OpenBrowser()
lg = LoginAction()   #例項化登入頁面
lg.login(driver,'abc_123456qwe','abc_123456')  #登入
hp =HomePage(driver)  #例項化home頁面元素
hp.addressBook().click()  #點選通訊錄按鈕
cp = AddContactPersonAction()  #例項化新增聯絡人頁面
cp.addContactPerson(driver,'qerrw','1323233@163.com','n','13423232323','gdgd') #新增聯絡人
#退出瀏覽器
driver.quit()


相關文章