我一直在使用 Pytest 和 Selenium Web 驅動程式自學測驗自動化。我所有的測驗函式都在一個名為test_web.py 的檔案中,該檔案位于名為tests的目錄中。我將所有函式分開,并將它們放在名為TestCases的單獨目錄中的自己的檔案中。例如,這是TestCase_AddStar.py 的樣子:
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.alert import Alert
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class Tags:
starSysButton = '//li[button][1]'
addStarButton = "//button[contains(text(), 'Add Star')]"
starNameField = "//input[1]"
modalAddButton = f"(//button[contains(text(), 'Add')])[2]"
starPath = f"//td[contains(text(),'Bob')]"
modalClose = "//button[@class='btn-close']"
class TestCase_AddStar():
URL = 'http://localhost:4200'
def __init__(self, browser):
self.browser = browser
def load(self):
self.browser(self.URL)
def test_addStar(self, browser):
starElement = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, Tags.starSysButton)))
starElement.click()
newStarElement = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, Tags.addStarButton)))
newStarElement.click()
enterStarName = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, Tags.starNameField)))
enterStarName.send_keys("Bob")
clickAddButton = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, Tags.modalAddButton)))
clickAddButton.click()
WebDriverWait(browser, 5).until(EC.alert_is_present())
alert = Alert(browser)
alert.accept()
closeModal = WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, Tags.modalClose)))
closeModal.click()
results = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, Tags.starPath)))
if results:
assert results
這就是驅動程式test_web.py 的內容。現在看起來像:
import pytest
from TestCases.TestCase_AddStar import TestCase_AddStar
from selenium.webdriver import Firefox
@pytest.fixture
def browser():
driver = Firefox()
driver.implicitly_wait(10)
yield driver
driver.quit()
def basic_test(browser):
add_star = TestCase_AddStar(browser)
add_star.load()
當我運行測驗時,我收到一個集合警告:
PytestCollectionWarning:無法收集測驗類“TestCase_AddStar”,因為它有一個初始化建構式(來自:tests/test_web.py)類 TestCase_AddStar():
我嘗試將“ test = False”行添加到類 TestCase_AddStar,我嘗試重命名檔案,使其檔案名中沒有“test”一詞,并且我嘗試取消完全初始化建構式。沒有任何效果。我要么收到收集警告,測驗被完全跳過,要么由于瀏覽器未加載而導致測驗超時。
有人有建議嗎?
編輯 1
測驗用例_AddStar.py
class TestCase_AddStar():
URL = 'http://localhost:4200'
@pytest.fixture
def load_browser(self, browser):
browser(self.URL)
yield
def test_addStar(self, load_browser):
starElement = WebDriverWait(load_browser, 10).until(EC.element_to_be_clickable((By.XPATH, Tags.starSysButton)))
starElement.click()
newStarElement = WebDriverWait(load_browser, 10).until(EC.element_to_be_clickable((By.XPATH, Tags.addStarButton)))
newStarElement.click()
enterStarName = WebDriverWait(load_browser, 10).until(EC.element_to_be_clickable((By.XPATH, Tags.starNameField)))
enterStarName.send_keys("Bob")
clickAddButton = WebDriverWait(load_browser, 10).until(EC.element_to_be_clickable((By.XPATH, Tags.modalAddButton)))
clickAddButton.click()
WebDriverWait(load_browser, 5).until(EC.alert_is_present())
alert = Alert(load_browser)
alert.accept()
closeModal = WebDriverWait(load_browser, 10).until(EC.element_to_be_clickable((By.XPATH, Tags.modalClose)))
closeModal.click()
results = WebDriverWait(load_browser, 10).until(EC.presence_of_element_located((By.XPATH, Tags.starPath)))
if results:
assert results
test_web.py
import pytest
from TestCases.TestCase_AddStar import TestCase_AddStar
from selenium.webdriver import Firefox
@pytest.fixture
def browser():
driver = Firefox()
driver.implicitly_wait(10)
yield driver
driver.quit()
TestCase_AddStar()
我在回溯中收到以下錯誤:
@pytest.fixture
def load_browser(self, browser):
browser(self.URL)
E TypeError: 'WebDriver' object is not callable
編輯 2
按照下面的建議添加了 .get()。但我現在有一個新的錯誤。

uj5u.com熱心網友回復:
正如您所注意到的,測驗不能有引數,__init__因為它是由pytest自動創建的。據我了解,您只想在特定的測驗類中加載特定的 URL - 這也可以在夾具中完成。只需從您的browser夾具派生夾具并添加負載函式:
class TestCase_AddStar:
URL = 'http://localhost:4200'
@pytest.fixture
def load_browser(self, browser):
browser.get(self.URL)
yield browser
def test_addStar(self, load_browser):
...
請注意,您不需要__init__方法和basic_test函式(pytest無論如何都無法使用)。您可以使用另一個 URL 引數將類似的派生夾具添加到每個測驗類中。
您的派生裝置將等效于:
@pytest.fixture
def load_browser(self):
driver = Firefox()
driver.implicitly_wait(10)
driver.get(self.url)
yield driver
driver.quit()
(這只是為了說明派生夾具如何作業)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/311599.html
標籤:Python 硒网络驱动程序 自动化测试 pytest
