簡體   English   中英

pytest-bdd 頁面 object 實現

[英]pytest-bdd page object implementation

我是 pytest-bdd 的新手。 我必須從頭開始實現自動化框架。 所以我遵循了一些材料並用非常基本的小框架實現。 當我運行測試時,我可以看到 webdriver 根本沒有啟動,也沒有看到任何錯誤。 我不知道如何解決這個問題。 誰能幫助我問題的根本原因是什么我需要一些 pytest-bdd 頁面 object model 實現的示例?

** 我的項目結構** [![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
from selenium import webdriver
driver = webdriver.Firefox(executable_path = "Path to geckodriver")
driver.get("https://google.com")
time.sleep(10)
driver.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM