找不到步骤实现 pytest-bdd

问题描述

我一直在使用 pytest 和 pytest-bdd v3.4 来运行 UI 测试。由于某种原因,发生以下错误。 pytest_bdd.exceptions.StepDeFinitionNotFoundError:未找到步骤定义。

功能已实现,但pytest无法定位。我一直在读到可能的解释是由于 pytest-bdd 版本 4,我已将其降级到 3.4,但问题仍然存在。

test_login.py

import time

import pytest
from Pages.pageFactory import PageFactory

from pytest_bdd import scenarios,given,when,then

# Scenarios
from Utils.enum import Page

scenarios('../features/login.feature')


@pytest.fixture
def context():
    b = None
    yield b


# Given Steps

@given('El navegador se encuentra en la pantalla de prelogin')
def open_browser():
    context.page = PageFactory.getPage(Page.auth)
    context.page.openAuthPage()


# When Steps

@when('El usuario presiona el boton de BancoFassil')
def push_fassil_button():
    context.page.checkPreLoginPage()
    context.page.acceptButton()
    time.sleep(5)


@then('La pantalla Login es desplegada')
def login_page_displayed():
    context.page = PageFactory.getPage(Page.login)
    context.page.checkLoginPage()


# Then Steps
@given('El navegador se encuentra en la pantalla de login')
def login_page():
    context.page = PageFactory.getPage(Page.login)
    context.page.checkLoginPage()
    time.sleep(5)


@when('El usuario ingresa el nuevo user')
def step_impl():
    context.page.insertUsername("user7")


@when('El usuario ingresa la password')
def step_impl(context):
    context.page.insertPassword("12345")


@when('El boton ingresar es presionado')
def push_login_button():
    context.page.login()
    time.sleep(5)


@then('La pantala de terminos y condiciones es desplegada')
def terms_conditions_page_displayed():
    context.page = PageFactory.getPage(Page.termsAndConditions)
    time.sleep(5)
    context.page.checkTermsAndConditionsPage()



@given('El navegador se encuentra en la pantalla de terminos y condiciones')
def terms_conditions():
    context.page = PageFactory.getPage(Page.termsAndConditions)
    time.sleep(5)
    context.page.checkTermsAndConditionsPage()


@when('El boton aceptar es presionado')
def push_login_button():
    context.page.acceptButton()


@then('La pantalla Home es desplegada')
def terms_conditions_page_displayed():
    context.page = PageFactory.getPage(Page.home)
    time.sleep(5)
    context.page.checkHomePage()

登录功能

Feature: Login a la plataforma

  Scenario: PreLogin
    Given El navegador se encuentra en la pantalla de prelogin
    When El usuario presiona el boton de BancoFassil
    Then La pantalla Login es desplegada

  Scenario: Login
    Given El navegador se encuentra en la pantalla de login
    When El usuario ingresa el nuevo user
      And El usuario ingresa la password
      And El boton ingresar es presionado
    Then La pantala de terminos y condiciones es desplegada


  Scenario: Terminos y Condiciones
    Given El navegador se encuentra en la pantalla de terminos y condiciones
    When El boton aceptar es presionado
    Then La pantalla Home es desplegada

登录场景的问题仍然存在:找不到步骤定义:当“El usuario ingresa el nuevo user

解决方法

您有两个名称相同但步骤注释不同的函数,并且您缺少 context 参数:

@when('El usuario ingresa el nuevo user')
def step_impl():
    context.page.insertUsername("user7")


@when('El usuario ingresa la password')
def step_impl(context):
    context.page.insertPassword("12345")

重命名一个或两个函数,添加上下文参数,你应该没问题:

@when('El usuario ingresa el nuevo user')
def enter_username(context):
    context.page.insertUsername("user7")


@when('El usuario ingresa la password')
def enter_password(context):
    context.page.insertPassword("12345")

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...