我正在使用Python Behave对Web应用程序运行自动化测试。
有一个登录页面,其中包含用户名和密码。
Behave场景具有不同的登录要求,例如;
Given I am logged on as user1
Then do something
我创建了一个csv文件来保存每次登录的用户名和密码,但是我无法只读取我想要的详细信息。
csv文件是这样的;
usertype,username,password
user1,somename1,somepassword1
user2,somename2,somepassword2
所需的用户在Behave步骤定义中传递;
@given('I am logged on as {login}')
我尝试了以下实现;
def do_login(context, login):
driver = context.browser
user_data = csv.DictReader(open('users.csv'))
for row in user_data:
row['user'] = login
uname = row['username']
pword = row['password']
driver.find_element_by_name('username').send_keys(uname)
driver.find_element_by_name('password').send_keys(pword)
但这只是使用表格中的第一个用户登录。
我不知道如何让它只选择与登录相对应的用户名和密码。
例如,我以user2的身份传递登录信息,我希望用户名为somename2,密码为password2。
我已经阅读了有关从csv文件中读取的其他问题,但我找不到与此相同的问题。
我对Python很陌生。
答案 0 :(得分:2)
在执行if statement
方法之前,如果 usertype 与登录匹配,则应在for loop
中使用send_keys
进行校对。
def do_login(context, login):
driver = context.browser
user_data = csv.DictReader(open('users.csv'))
for row in user_data:
row['user'] = login
uname = row['username']
pword = row['password']
# something like this
if login == row['usertype']:
driver.find_element_by_name('username').send_keys(uname)
driver.find_element_by_name('password').send_keys(pword)
答案 1 :(得分:0)
我对你的问题不是很清楚,但你可以试试这个
只需阅读Dict格式列表中的csv数据
user_data = csv.DictReader(open('users.csv'))
user_list = [d for d in user_data]
现在您可以按照以下方式使用此数据:
user_list[row_index][column_name]
我建议您更好地将登录信息/日志存储在任何数据库系统中。