每当我运行我的代码时,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 报告集成。
使用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")