自動化 selenium +po+pytest 疑點
完整的程式碼在 github 上,ssh:git@github.com:GrowthDuo/pom_mumu.git
我想將 driver 設定為會話級別,想要最佳化一下,首頁程式碼可以直接呼叫登入的方法。
這是我的driver的程式碼
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.firefox.service import Service as FirefoxService
from selenium.webdriver.chrome.options import Options as ChromeOptions
from selenium.webdriver.firefox.options import Options as FirefoxOptions
@pytest.fixture(scope="session")
def driver(request):
browser_type = request.config.getoption("--browser")
headless = request.config.getoption("--headless")
if browser_type == 'chrome':
chrome_options = ChromeOptions()
if headless:
chrome_options.add_argument('--headless')
chrome_service = ChromeService(executable_path='/path/to/chromedriver')
driver = webdriver.Chrome(service=chrome_service, options=chrome_options)
elif browser_type == 'firefox':
firefox_options = FirefoxOptions()
if headless:
firefox_options.add_argument('--headless')
firefox_service = FirefoxService(executable_path='/path/to/geckodriver')
driver = webdriver.Firefox(service=firefox_service, options=firefox_options)
else:
raise ValueError("Unsupported browser type")
driver.maximize_window()
yield driver
driver.quit()
接下來的是登入測試程式碼
import time
import allure
from page_object.UserLoginPage import UserLoginPage
from config.config_driver import initialize_driver
from common.yaml_config import UserConfig # 假設你將上面的類儲存在config/user_config.py中
from util import util
# 使用pytest類啟動
# @pytest.mark.parametrize('username, password', [('will', '<PASSWORD>'), ('tom', '123456')])
class TestLoginPage():
@classmethod
def setup_class(cls):
"""
測試用例執行前執行
:return:
"""
# 初始化瀏覽器驅動
cls.driver = initialize_driver('chrome')
# 例項化頁面物件
cls.login_page = UserLoginPage(cls.driver)
def test_login(self):
# driver = initialize_driver('chrome') # 假設使用Chrome瀏覽器
# # 例項化頁面物件
# login_page = UserLoginPage(driver)
# 載入使用者配置
config = UserConfig() # 單一例項
login_url = config.get_url()
self.driver.get(login_url)
# 獲取日誌物件
logger = util.get_logger()
logger.info('測試使用者登入')
# 獲取使用者名稱和密碼
username, password = config.get_credentials('will')
# 輸入使用者名稱和密碼
with allure.step("第一步: 輸入使用者名稱"):
self.login_page.input_username(username)
logger.debug('輸入使用者名稱稱: %s', username)
with allure.step("第二步: 輸入密碼"):
self.login_page.input_pwd(password)
logger.debug('輸入密碼: %s', password)
# 在開啟網頁前截圖
before_screenshot = self.driver.get_screenshot_as_png()
allure.attach(before_screenshot, name='登入網頁', attachment_type=allure.attachment_type.PNG)
with allure.step("第三步: 點選登入"):
self.login_page.login_click()
logger.debug('點選登入')
print(self.driver.title)
time.sleep(3)
# # 等待頁面載入完成,這裡以等待某個特定元素出現為例
# login_page.wait_for_title()
# 登入後截圖
after_screenshot = self.driver.get_screenshot_as_png()
allure.attach(after_screenshot, name='登入成功後進入首頁', attachment_type=allure.attachment_type.PNG)
# 這裡可以新增斷言來驗證登入是否成功
with allure.step("登入"):
try:
assert 'AutoMeter' == self.driver.title
except AssertionError:
allure.attach(after_screenshot, name='登入失敗', attachment_type=allure.attachment_type.PNG)
logger.error("注意,注意, %s", "報錯了", exc_info=1)
@classmethod
def teardown_class(cls):
cls.driver.quit()
下面的是首頁,首頁要先登入,我想直接呼叫登入的登入方法
import time
import pytest
import allure
from page_object.UserLoginPage import UserLoginPage
from page_object.ProjectManagementPage import ProjectManagementPage
from config.config_driver import initialize_driver
from common.yaml_config import UserConfig
from util import util
class TestHomePage:
@classmethod
def setup_class(cls):
cls.driver = initialize_driver('chrome')
cls.login_page = UserLoginPage(cls.driver)
cls.project_page = ProjectManagementPage(cls.driver)
def test_home_page(self):
config = UserConfig()
login_url = config.get_url()
self.driver.get(login_url)
self.logger = util.get_logger()
self.logger.info('測試首頁')
username, password = config.get_credentials('will')
with allure.step("第一步: 輸入使用者名稱"):
self.login_page.input_username(username)
self.logger.debug('輸入使用者名稱稱: %s', username)
with allure.step("第二步: 輸入密碼"):
self.login_page.input_pwd(password)
self.logger.debug('輸入密碼: %s', password)
with allure.step("第三步: 點選登入"):
self.login_page.login_click()
self.logger.debug('點選登入')
#
self.login_page.wait_for_title()
with allure.step("第四步: 點選專案管理"):
self.project_page.click_pro()
self.logger.debug('點選專案管理')
time.sleep(3)
# 點選專案管理
with allure.step("第四步: 點選專案管理"):
self.project_page.click_pro()
self.logger.debug('點選專案管理')
time.sleep(3)
with allure.step("第五步: 輸入專案名稱"):
time.sleep(3)
project_name = "測試專案"
self.project_page.input_project_name(project_name)
self.logger.debug('輸入專案名稱: %s', project_name)
with allure.step("第六步: 點選查詢"):
self.project_page.click_project()
self.logger.debug('點選查詢')
@classmethod
def teardown_class(cls):
cls.driver.quit()
if __name__ == '__main__':
pytest.main(['-v' ,'-s', 'test_home_page.py'])
相關文章
- selenium自動化操作
- Selenium自動化實現web自動化-1Web
- titans Selenium 自動化框架框架
- selenium java自動化測試Java
- Selenium自動化測試框架框架
- Selenium用法詳解 - - selenium自動化測試概要
- Selenium自動化測試網頁網頁
- java+selenium 自動化測試Java
- selenium自動化測試面試集合面試
- 利用 Selenium 自動化 web 測試Web
- 自動化測試框架Selenium的使用——安裝Selenium框架
- selenium 自動化 chromedriver.exe 存放位置Chrome
- 自動化測試 selenium 環境搭建
- Selenium 自動化最佳實踐技巧 (中)
- 自動化測試框架Selenium入門框架
- selenium+python自動化測試Python
- 「UI 測試自動化selenium」彙總UI
- Web自動化-Selenium自動化測試-1-主要學習計劃Web
- 關於 ui 自動化測試 driver 疑問?UI
- Web自動化-Selenium自動化測試-4-編寫測試用例Web
- python 包之 selenium 自動化使用教程Python
- Selenium 自動化測試從零實戰
- 使用Selenium自動化測試SAP CRM WebClient UIWebclientUI
- 滴滴雲控制檯 Selenium 自動化測試初探
- Selenium+Java自動化測試常用的方法Java
- 基於Selenium + Python的web自動化框架PythonWeb框架
- 用python實現selenium 自動化測試Python
- dotnet使用Selenium執行自動化任務
- 輕鬆自動化---selenium-webdriver(python) (十二)WebPython
- 輕鬆自動化---selenium-webdriver(python) (十一)WebPython
- 輕鬆自動化---selenium-webdriver(python) (十)WebPython
- 輕鬆自動化---selenium-webdriver(python) (九)WebPython
- 輕鬆自動化---selenium-webdriver(python) (八)WebPython
- 輕鬆自動化---selenium-webdriver(python) (七)WebPython
- 輕鬆自動化---selenium-webdriver(python) (六)WebPython
- 輕鬆自動化---selenium-webdriver(python) (五)WebPython
- 輕鬆自動化---selenium-webdriver(python) (四)WebPython
- 輕鬆自動化---selenium-webdriver(python) (三)WebPython