我正在使用 python selenium 与Behavior包一起工作。
这是代码:
@given('the user is on the login page')
def step_given_user_on_login_page(context):
PATH = 'C:/Users/PycharmProjects/ui_test/chromedriver-win32/chromedriver.exe'
context.driver = webdriver.Chrome(PATH, options=chrome_options)
context.driver.set_window_position(2000, 0)
context.driver.maximize_window()
context.driver.get("http://127.0.0.1:5000/cases")
@when('the user enters valid credentials')
def step_when_user_enters_valid_credentials(context):
login(context.driver, username, password)
@when('clicks on the login button')
def step_when_clicks_login_button(context):
# Assuming login function handles the login button click
pass
@then('the user should be redirected to the cases page')
def step_then_user_redirected_to_cases_page(context):
assert "cases" in context.driver.current_url
代码运行良好,直到这一行:
assert "cases" in context.driver.current_url
错误是:
AttributeError: 'Context' object has no attribute 'driver'
我很困惑为什么第一个context.driver有效:
login(context.driver, username, password)
但是第二个 context.driver 失败了
在 context.driver.current_url 中断言“cases”
有朋友可以帮忙吗?
问题在于,可能没有在
step_then_user_redirected_to_cases_page
函数中初始化或传递
context.driver
。 尽管
context
对象在不同的步骤函数之间共享,但是
context.driver
属性只会在显式设置它的函数中可用。
可以通过以下两种方法解决此问题:
方法 1:将
driver
作为参数传递
将
context.driver
作为参数传递给需要它的函数:
@when('the user enters valid credentials')
def step_when_user_enters_valid_credentials(context):
login(context.driver, username, password)
@when('clicks on the login button')
def step_when_clicks_login_button(context):
# Assuming login function handles the login button click
pass
@then('the user should be redirected to the cases page')
def step_then_user_redirected_to_cases_page(context):
assert "cases" in context.driver.current_url
修改的步骤定义,将
context.driver
传递给需要它的函数:
@when('the user enters valid credentials')
def step_when_user_enters_valid_credentials(context):
login(context.driver, username, password)
@when('clicks on the login button')
def step_when_clicks_login_button(context):
click_login_button(context.driver) # 假设 click_login_button 函数处理登录按钮点击
@then('the user should be redirected to the cases page')
def step_then_user_redirected_to_cases_page(context):
assert "cases" in context.driver.current_url
方法 2:使用
context.driver
初始化所有需要它的函数
在每个需要使用
context.driver
的步骤函数中,添加初始化代码:
@when('the user enters valid credentials')
def step_when_user_enters_valid_credentials(context):
context.driver = context.driver # 这行代码确保 context.driver 在该函数中可用
login(context.driver, username, password)
@when('clicks on the login button')
def step_when_clicks_login_button(context):
context.driver = context.driver
# Assuming login function handles the login button click
pass
@then('the user should be redirected to the cases page')
def step_then_user_redirected_to_cases_page(context):
context.driver = context.driver
assert "cases" in context.driver.current_url
请注意,这两种方法都需要在适当的地方传递或初始化
context.driver
。 选择最适合的代码结构和个人偏好的方法。