我一直在使用 Pytest 和 Selenium Web 驱动程序自学测试自动化。我所有的测试函数都在一个名为测试网络.py,它位于名为的目录中tests。我将所有函数分开,并将它们放在一个名为的单独目录中的自己的文件中测试用例。例如,这就是测试用例_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
这就是司机所说的,测试网络.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”,因为它有一个init构造函数(来自:tests/test_web.py)
类 TestCase_AddStar():
我尝试添加行“test= False”到类 TestCase_AddStar,我尝试重命名该文件,以便它的文件名中不包含“test”一词,并且我尝试删除init完全构造函数。没有任何效果。我要么收到集合警告,要么完全跳过测试,要么由于浏览器未加载而导致测试超时。
有人有建议吗?
Edit 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
测试网络.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
Edit 2
按照下面的建议添加了 .get() 。但我现在有一个新错误。