0

我是 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
4

1 回答 1

0
from selenium import webdriver
driver = webdriver.Firefox(executable_path = "Path to geckodriver")
driver.get("https://google.com")
time.sleep(10)
driver.close()
于 2022-01-21T04:22:34.077 回答