在我使用 Python Behave Selenium webdriver 运行此自动化代码后,Chrome 很快就关闭了

问题描述 投票:0回答:1

每当我运行我的代码时,chrome 都会打开并快速关闭,我观察了 chrome 浏览器,当它打开时,它甚至没有转到 URL 链接,它打开然后快速关闭大约一毫秒。

如果我删除给定/何时/然后以及“def”,它会顺利运行。我想知道当我使用 Give/When/Then 时可能会出现什么问题?

代码是通过 Visual Studio 代码用 Python 语言编写的

VS代码不显示错误,终端上也没有显示错误。

from behave import *
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

service = Service(executable_path="chromedriver.exe")
driver = webdriver.Chrome(service=service)

@given('User accesses website')
def accessWebsite(context):
    driver.get("<website URL here")

@when('User enters valid registered email')
def enterUsername(context):
    driver.find_element(By.ID, "username").send_keys("[email protected]")

@when('User enters valid registered password')
def enterPassword(context):
    driver.find_element(By.XPATH, '//*[@id="root"]/div/div/div/div[2]/div/div/div/div[2]/form/div/div[2]/div/div/div[1]/input').send_keys("ABc123$%")

@when('User presses Login button')
def pressEnter(context):
    driver.find_element(By.XPATH, '//*[@id="root"]/div/div/div/div[2]/div/div/div/div[2]/form/div/div[3]/button').click()

@then('User is redirected to website main page')
def verifyWorkspacesHeader(context):
    driver.implicitly_wait(10)
    driver.find_element(By.XPATH, '//*[@id="root"]/div/div[2]/div[1]/p')

def after_all(context):
    time.sleep(10)
    driver.quit()

我尝试删除给定/何时/然后以及“def”,并且步骤运行顺利,所以我认为网络驱动程序位置不是问题。

我正在尝试使用 Behave 使网站自动化,因为我也想将其与 Allure 报告集成。

python selenium-webdriver automation gherkin python-behave
1个回答
0
投票

使用Behavior的测试装置/设置功能并将您的WebDriver实例放置在上下文中。

行为教程文档实际上提供了此场景的示例:

# in features/environment.py

from behave import fixture, use_fixture
from behave4my_project.fixtures import wsgi_server
from selenium import webdriver

@fixture
def selenium_browser_chrome(context):
    # -- HINT: @behave.fixture is similar to @contextlib.contextmanager
    context.browser = webdriver.Chrome()
    yield context.browser
    # -- CLEANUP-FIXTURE PART:
    context.browser.quit()

def before_all(context):
    use_fixture(wsgi_server, context, port=8000)
    use_fixture(selenium_browser_chrome, context)
    # -- HINT: CLEANUP-FIXTURE is performed after after_all() hook is called.

def before_feature(context, feature):
    model.init(environment='test')

您可以省略示例中的 wsgi 部分。

然后在您的步骤中,通过

context
访问驱动程序:

@given('User accesses website')
def accessWebsite(context):
    context.driver.get("<website URL here")
© www.soinside.com 2019 - 2024. All rights reserved.