0

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

4

2 回答 2

2

如果用户类型与登录名匹配,则应在执行该方法之前使用if statementin 进行证明。for loopsend_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)
于 2015-09-17T15:49:08.927 回答
0

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

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

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

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

user_list[row_index][column_name]

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

于 2015-09-17T16:02:12.790 回答