1

I'm doing an end-to-end test automation project in which I simply login to a specific page. To do this, I use Python 3.10, Pytest, Playwright and Allure to report. In my implementation file of my feature, when executing in console: pytest --headed --alluredir=C:.../RefactorPlay/surefire-reports. It returns me no tests ran referring to the fact that no test case to be executed is found.

Implementation file:

from playwright.sync_api import Page
import allure
from pytest_bdd import scenario, given, when, then
from pages.ican_login import ICanLogin

@scenario('Inicio de sesion con usuario y contraseña')
def test_example_is_working_bdd():
    print('starting bdd test')


@given("El usuario se ha registrado previamente, y los ingresa correctamente.")
def goto_website(page):
    page.goto("https://urldeejempl.com/")
    login_page = ICanLogin(page)
    login_page.fill_input_user("[email protected]")
    login_page.fill_input_password("example")

@when("El usuario hace clic sobre el boton ingresar.")
def login_to_the_system(page):
    login_page = ICanLogin(page)
    login_page.select_submit()


@then('El usuario puede ingresar sesion a su cuenta correctamente.')
def check_ican_nav_menu(page):
    content = page.text_content("//html/body/main/aside/section/div/div[2]/div/a")
    assert content == "CONTENIDO"

feature file:

Feature: Inicio Sesion en test Sistema
  # Enter feature description here

  Scenario: Inicio de sesion con usuario y contraseña

  Given El usuario se ha registrado previamente, y los ingresa correctamente.
    When El usuario hace clic sobre el boton ingresar.
  Then El usuario puede ingresar sesion a su cuenta correctamente.

icanlogin.py file:

from playwright.sync_api import Page


class ICanLogin:
    def __init__(self, page: Page):
        self.page = page

    # Web Elements
    user: str = "#Usuario"
    password: str = "#password"
    submit: str = "#btnIngresar"
    u_forgot: str = "div:text('¿Olvidaste la contraseña?')"
    corporation_sign_up: str = "div:text('Registro de Empresas')"

    def verify_elements_is_presents(self):
        self.page.wait_for_selector(self.user)
        self.page.wait_for_selector(self.password)
        self.page.wait_for_selector(self.submit)
        self.page.wait_for_selector(self.u_forgot)
        self.page.wait_for_selector(self.corporation_sign_up)

    def fill_input_user(self, value):
        with self.page.expect_navigation():
            self.page.fill(self.user, value)

    def fill_input_password(self, value):
        with self.page.expect_navigation():
            self.page.fill(self.password, value)

    def select_submit(self):
        with self.page.expect_navigation():
            self.page.click(self.submit)

    def select_u_forgot(self):
        with self.page.expect_navigation():
            self.page.click(self.u_forgot)

    def select_corporation_sign_up(self):
        with self.page.expect_navigation():
            self.page.click(self.corporation_sign_up)

console error:

pytest --headed --alluredir=C:/Users/.../Desktop/RefactorPlay/surefire-reports
=============================================== test session starts ================================================
platform win32 -- Python 3.10.6, pytest-7.1.2, pluggy-1.0.0
rootdir: C:\Users\...\Desktop\RefactorPlay
plugins: allure-pytest-2.12.0, asyncio-0.20.3, base-url-2.0.0, bdd-6.1.1, dependency-0.5.1, html-3.1.1, metadata-2.0.2, playwright-0.3.0, rerunfailures-10.3
asyncio: mode=strict
collected 0 items

============================================== no tests ran in 0.04s ===============================================

I know that pytest takes functions that are prefixed with "test_ ..." as valid test cases. Try renaming my functions around it.

I can't detect what I'm doing wrong and I'm new to this. It's just a simple login.

1 Answer 1

1

The issue is that there is no test function defined in your implementation file, which is required by Pytest to identify what to run.

To fix this, add a test function in the implementation file:

from playwright.sync_api import Page
import allure
from pytest_bdd import scenario, given, when, then
from pages.ican_login import ICanLogin

@scenario('Inicio de sesion con usuario y contraseña')
def test_example_is_working_bdd():
    print('starting bdd test')

@given("El usuario se ha registrado previamente, y los ingresa correctamente.")
def goto_website(page):
    page.goto("https://urldeejempl.com/")
    login_page = ICanLogin(page)
    login_page.fill_input_user("[email protected]")
    login_page.fill_input_password("example")

@when("El usuario hace clic sobre el boton ingresar.")
def login_to_the_system(page):
    login_page = ICanLogin(page)
    login_page.select_submit()

@then('El usuario puede ingresar sesion a su cuenta correctamente.')
def check_ican_nav_menu(page):
    content = page.text_content("//html/body/main/aside/section/div/div[2]/div/a")
    assert content == "CONTENIDO"
    
def test_login(page):
    goto_website(page)
    login_to_the_system(page)
    check_ican_nav_menu(page)

Now, you can run the test with the following command:

pytest --headed --alluredir=C:/Users/.../Desktop/RefactorPlay/surefire-reports

This will run the test and generate the Allure report in the specified directory.

1
  • I've added the function that calls the other functions, but it still doesn't work.
    – VSacudato
    Jan 31, 2023 at 19:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.