Python語言web自動化通用腳本


web自動化腳本中有一部分代碼是可以借鑒的,我們只需要將這個框架移植到當前項目中,修改部分參數即可。比如日志類、driver對象、元素基本操作等。

以商城項目為例,以下就是相關代碼。

base包(內含日志、driver對象、頁面元素操作):

頁面元素操作(base.py):

import time
from time import sleep

import page
from selenium.webdriver.support.wait import WebDriverWait
from base.get_logger import GetLogger


# 獲取log日志器
log = GetLogger().get_logger()


class Base:

def __init__(self, driver):
log.info("[base]: 正在獲取初始化driver對象:{}".format(driver))
self.driver = driver

# 查找元素方法 封裝
def base_find(self, loc, timeout=30, poll=0.5):
log.info("[base]: 正在定位:{} 元素,默認定位超時時間為: {}".format(loc, timeout))
# 使用顯示等待 查找元素
return WebDriverWait(self.driver,
timeout=timeout,
poll_frequency=poll).until(lambda x:x.find_element(*loc))

# 點擊元素 方法封裝
def base_click(self, loc):
log.info("[base]: 正在對:{} 元素實行點擊事件".format(loc))
self.base_find(loc).click()

# 輸入元素 方法封裝
def base_input(self, loc, value):
# 獲取元素
el = self.base_find(loc)
# 清空
log.info("[base]: 正在對:{} 元素實行清空".format(loc))
el.clear()
# 輸入
el.send_keys(value)

# 獲取文本信息 方法封裝
def base_get_text(self, loc):
log.info("[base]: 正在獲取:{} 元素文本值".format(loc))
return self.base_find(loc).text

# 截圖 方法封裝
def base_get_image(self):
log.info("[base]: 斷言出錯,調用截圖")
self.driver.get_screenshot_as_file("../image/{}.png".format(time.strftime("%Y_%m_%d %H_%M_%S")))

# 判斷元素是否存在 方法封裝
def base_element_is_exist(self, loc):
try:
self.base_find(loc, timeout=2)
log.info("[base]: {} 元素查找成功,存在頁面".format(loc))
return True # 代表元素存在
except:
log.info("[base]: {} 元素查找失敗,不存在當前頁面".format(loc))
return False # 代表元素不存在

# 回到首(頁購物車、下訂單、支付)都需要用到此方法
def base_index(self):
sleep(2)
self.driver.get(page.URL)

# 切換frame表單方法
def base_switch_frame(self, name):
self.driver.switch_to.frame(name)

# 回到默認目錄方法
def base_default_content(self):
self.driver.switch_to.default_content()

# 切換窗口 方法 調用此方法
def base_switch_to_window(self, title):
log.info("正在執行切換title值為:{}窗口 ".format(title))
self.driver.switch_to.window(self.base_get_title_handle(title))

# 獲取指定title頁面的handle方法
def base_get_title_handle(self, title):
# 獲取當前頁面所有的handles
for handle in self.driver.window_handles:
log.info("正在遍歷handles:{}-->{}".format(handle, self.driver.window_handles))
# 切換 handle
self.driver.switch_to.window(handle)
log.info("切換 :{} 窗口".format(handle))
# 獲取當前頁面title 並判斷 是否等於 指定參數title
log.info("判斷當前頁面title:{} 是否等於指定的title:{}".format(self.driver.title, title))
if self.driver.title == title:
log.info("條件成立! 返回當前handle{}".format(handle))
# 返回 handle
return handle

driver對象(get_driver.py):
from selenium import webdriver
import page


class GetDriver:
driver = None

# 獲取 driver
@classmethod
def get_driver(cls):
if cls.driver is None:
# 獲取driver
cls.driver = webdriver.Firefox()
# 最大化瀏覽器
cls.driver.maximize_window()
# 打開url
cls.driver.get(page.URL)
# 返回 driver
return cls.driver

# 關閉driver
@classmethod
def quit_driver(cls):
if cls.driver:
cls.driver.quit()
# 必須置空操作
cls.driver = None

if __name__ == '__main__':
GetDriver().quit_driver()

日志對象(get_logger.py):
import logging.handlers


class GetLogger:

logger = None
# 在最外側運行
# filename = "./log/xxxx.log"
# 獲取 logger
@classmethod
def get_logger(cls):
# 如果 logger為空
if cls.logger is None:
# 獲取日志器
cls.logger = logging.getLogger()
# 設置日志器默認級別
cls.logger.setLevel(logging.INFO)
# 獲取處理器 控制台
sh = logging.StreamHandler()
# 獲取處理 文件(時間)
th = logging.handlers.TimedRotatingFileHandler(filename="../log/xxxx.log",
when="midnight",
interval=1,
backupCount=30,
encoding="utf-8")
# 獲取格式器
fm = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s"
fmt = logging.Formatter(fm)
# 將格式器 設置 處理器中
sh.setFormatter(fmt)
th.setFormatter(fmt)
# 將處理器 添加到 日志器中
cls.logger.addHandler(sh)
cls.logger.addHandler(th)
# 返回 日志器
return cls.logger

定義測試套件(run_main.py直接放在項目目錄下):
# 導包
import unittest
import time
from tool.HTMLTestRunner import HTMLTestRunner


# 定義測試套件 在scripts中 運行
# suite = unittest.defaultTestLoader.discover("./")
# 在最外側運行
suite = unittest.defaultTestLoader.discover("./scripts")
# 報告生成目錄及文件名稱
dir_path = "./report/{}.html".format(time.strftime("%Y_%m_%d %H_%M_%S"))
# 獲取文件流並調用run運行
with open(dir_path, "wb") as f:
HTMLTestRunner(stream=f, title="Tpshop商城自動化測試報告", description="操作系統:win7").run(suite)

在工具包(tools)中存放HTMLTestRunner.py文件

以上就是Python語言web自動化腳本常用的代碼,按需使用。


免責聲明!

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



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