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

Python - Read CSV cell from specific row - row index is passed in variable

我正在使用 Python Behave to 运行 针对 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)

但这只是用 table 中的第一个用户登录。

不知道怎么弄到select只有登录对应的用户名和密码

因此,例如,我将登录名作为 user2 传递,我希望用户名作为 somename2,密码作为 password2。

我读过其他有关从 csv 文件读取的问题,但找不到与此相同的问题。

我对 Python 很陌生。

如果 usertypelogin 匹配,您应该在 for loop 中使用 if statement 进行证明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)

我不太清楚你的问题,但你可以试试这个

只读取Dict格式列表中的csv数据

user_data = csv.DictReader(open('users.csv'))
user_list = [d for d in user_data]

现在您可以按照自己的方式使用此数据:

user_list[row_index][column_name]

我建议最好将您的登录名 information/Logs 存储在任何数据库系统中。