Python - 从特定行读取CSV单元 - 行索引在变量中传递

时间:2015-09-17 15:31:59

标签: python csv python-behave

我正在使用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很陌生。

2 个答案:

答案 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]

我建议您更好地将登录信息/日志存储在任何数据库系统中。