pytest 結合selenium 運用案例


登錄案例

所屬模塊:login,  用例編號:C001001,  前置條件:系統中存在賬號, 

測試步驟:不輸入管理員賬號 只輸入密碼,點擊登陸

預期結果:提示信息為:用戶名不能為空

 

 

 測試結果:通過。

 

運行環境 pytest selenium 

用例代碼 pytest -s 執行:

import pytest
from selenium import webdriver
import time

class Test_錯誤登錄:

def test_C001001(self):

print('\n用例 C001001: 不輸入賬號登錄')

# 實例化瀏覽器 如果為空就是是用的項目根目錄的Chrome驅動
borwser = webdriver.Chrome()
# 請求網址
borwser.get('http://test.lemonban.com/ningmengban/app/login/login.html')
# 隱式等待 每隔半秒請求
borwser.implicitly_wait(10)
# 窗口放大
borwser.maximize_window()
# 點擊密碼框
borwser.find_element_by_id('password').click()
borwser.find_element_by_id('password').send_keys('zzc222736')
time.sleep(2)
# 點擊登陸
borwser.find_element_by_id('login-button').click()
time.sleep(2)
tes = borwser.find_element_by_xpath('//*[@id="myform"]/div[4]/p').text

print(tes)
assert tes == '用戶名不能為空。'

多條用例

用例2

所屬模塊:login,  用例編號:C001001,  前置條件:系統中存在賬號, 

測試步驟:不輸入管理員賬號 只輸入密碼,點擊登陸

預期結果:提示信息為:密碼不能為空。

 

 

 只可在上一個登陸類下面添加方法即可

如果不用執行前面的測試用例 可以指定用例執行:pytest -k 用例函數名或者包含的數值

例如:pytest -s -k 002


def test_C001002(self):
print('\n用例 C001002: 正確的賬號不輸入密碼')

# 實例化瀏覽器 如果為空就是是用的項目根目錄的Chrome驅動
borwser = webdriver.Chrome()
# 請求網址
borwser.get('http://test.lemonban.com/ningmengban/app/login/login.html')
# 隱式等待 每隔半秒請求
borwser.implicitly_wait(10)
# 窗口放大
borwser.maximize_window()
# 點擊賬號框
borwser.find_element_by_id('username').click()
borwser.find_element_by_id('username').send_keys('13409222222')
time.sleep(2)
# 點擊登陸
borwser.find_element_by_id('login-button').click()
time.sleep(2)
tes = borwser.find_element_by_xpath('//*[@id="myform"]/div[4]/p').text

print(tes)
assert tes == '密碼不能為空。'

驗證alert彈框內容

定位內容方法: .switch_to.alert.text

點擊確定方法:.accept()

點擊取消方法:.dismiss() 

彈窗輸入方法:.send_keys(keysToSend)

 

 

 執行用例 pytest -s -k 003:

def test_C001003(self):
print('\n用例 C001003: 錯誤的賬號正確的密碼')

# 實例化瀏覽器 如果為空就是是用的項目根目錄的Chrome驅動
borwser = webdriver.Chrome()
# 請求網址
borwser.get('http://test.lemonban.com/ningmengban/app/login/login.html')
# 隱式等待 每隔半秒請求
borwser.implicitly_wait(10)
# 窗口放大
borwser.maximize_window()
# 點擊賬號框
borwser.find_element_by_id('username').click()
borwser.find_element_by_id('username').send_keys('13409222222')
borwser.find_element_by_id('password').click()
borwser.find_element_by_id('password').send_keys('zzc222736')
time.sleep(2)
# 點擊登陸
borwser.find_element_by_id('login-button').click()
time.sleep(2)
alertText = borwser.switch_to.alert.text
print(alertText+'+打印效果')
assert alertText == '該手機號沒有注冊'

 

封裝調用重復代碼 減去代碼量

有時候有些用例會出現大量的重復 比如說有許多用例需要登錄

不可能每條用例都寫一遍登錄邏輯,或者網頁源碼出現改動那么我就需要修改自動化代碼

所以為了減去代碼量可以使用封裝調用重復的代碼

可以在自動化項目中創建一個目錄專門存放重復代碼,以用來調用。

 

 

 

 寫完公共邏輯代碼 就可以到自動化文件中引入過來 進行傳值

 

 

 公共邏輯代碼文件 進行接收 

from selenium import webdriver

def loginAndCheck(username,password):

# 實例化瀏覽器 如果為空就是是用的項目根目錄的Chrome驅動
borwser = webdriver.Chrome()
# 請求網址
borwser.get('http://test.lemonban.com/ningmengban/app/login/login.html')
# 隱式等待 每隔半秒請求
borwser.implicitly_wait(10)
# 窗口放大
borwser.maximize_window()
# 對傳過來的值進行判斷,如果有值就進行引用

if username is not None:
borwser.find_element_by_id('username').click()
borwser.find_element_by_id('username').send_keys(username)

if password is not None:
borwser.find_element_by_id('password').click()
borwser.find_element_by_id('password').send_keys(password)

# 點擊登陸
borwser.find_element_by_id('login-button').click()

alertText = borwser.switch_to.alert.text
print(alertText + '+打印效果')

# 執行完畢退出
borwser.quit()

# 返回彈框值
return alertText

接下來 自動化腳本就可以得到簡化

# 引入公共邏輯代碼的腳本
from lib.webui import loginAndCheck

class Test_錯誤登錄:

def test_C001003(self):
print('\n用例 C001003: 錯誤的賬號正確的密碼')

# 對返回值進行接收 並傳值
alertText = loginAndCheck(None,'88888888')
# 對返回值進行判斷
assert alertText == '該手機號沒有注冊'

注意!!! 然后運行的時候 路徑是在自動化腳本的路徑程序是找不到你的公共邏輯腳本的路徑的 

所以:要cd到涵蓋了 lib目錄和 自動化腳本的目錄里去 以模塊去運行:python -m pytest cases -sv

目錄結構:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM