我是 pytest-bdd 的新手。我必须从头开始实现自动化框架。所以我遵循了一些材料并用非常基本的小框架实现。当我运行测试时,我可以看到 webdriver 根本没有启动,也没有看到任何错误。我不知道如何解决这个问题。谁能帮助我问题的根本原因是什么我需要一些 pytest-bdd 页面对象模型实现的示例?
** 我的项目结构** [![projectstructure][1]][1]
在测试目录中,我有 features 和 step_def 目录。在 steps_def 里面我有一个 test_file_name.py 和初始化文件。
在页面对象目录中,我有 basepage 和 loginpage python 文件
基本页面.py
"""
Base page which has base URL and locators and parent class for other classes
"""
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class Base_Page:
"Base page which has locators and URL"
def __init__(self,driver):
self.driver = driver
def do_click(self,by_locator):
WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(by_locator)).click()
def do_send_keys(self,by_locator,text):
WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(by_locator)).send_keys(text
登录页面
"""
Login page actions
"""
from page_objects.base_page import Base_Page
from selenium.webdriver.common.by import By
from config import config
class Login_page(Base_Page):
"Class to run the login page"
user_name = (By.XPATH,"//input[@id='username']")
password = (By.XPATH,"//input[@id='password']")
check_box = (By.NAME,"remember")
login_button = (By.XPATH,"//input[@id='login']")
base_url = config.BASE_URL
def set_username(self):
"Set the username in the username field"
try:
username = self.do_send_keys(self.user_name,"1111111")
self.result_flag = True
except Exception as e:
self.result_flag = False
print(f"Could not set the username. Got an error {e}")
return self.result_flag
竞赛
import pytest
from selenium import webdriver
from pytest_bdd import given
@pytest.fixture(params=['Chrome','Firefox'], scope="class")
def init_driver(request):
if request.param == 'Chrome':
web_driver = webdriver.Chrome()
if request.param == 'Firefox':
web_driver = webdriver.Firefox()
request.cls_driver = web_driver
yield
web_driver.close()
@given('Navigate to the URL')
def navigate_url(init_driver):
"Pass the username"
init_driver.get("https://www.example.com")
我在 step_defs 中的测试文件
from pytest_bdd import given, when, then, scenario, parsers
from page_objects.base_page import Base_Page
from page_objects.login_page import Login_page
import pytest
scenario("../features/login.feature",'Login to the app')
def test_pass():
pass
@when(parsers.cfparse('Enter the username {username:Number}',extra_types=dict(Number=int)))
def get_username(init_driver):
"Set the phone number as a username"
log = Login_page(init_driver)
log.set_username()
我的功能文件 '''功能:导航到 Practo 应用程序并使用凭据登录
场景大纲:登录到应用程序给定导航到 URL 当输入用户名''并输入密码并取消选中复选框并单击登录按钮然后验证我们已经登录到应用程序
When I run pytest test_file_name.py I am not getting any error but it's not starting the webdriver also ,it just gives collected 1 item and it's passed.
can someone help me how to fix this issue?
[1]: https://i.stack.imgur.com/BnA6C.png