之前尝试了Python+selenium+unittest+HTMLTestRunner(传送门)写了登陆脚本,然后又看了参数化及循环,于是决定写个参数化的登陆脚本。当然遇到问题是在所难免的,几经周折,最后还是完成了参数化脚本。所以写下本帖记录一下,方便以后查阅。现在先来分析一下脚本出现的问题,一开始脚本是这样的:
#构建登陆类,用unittest框架,所以是unittest.testCase
class test(unittest.TestCase):
#构建登陆异常的方法
def test_login(self):
dr=webdriver.Chrome() #调用谷歌浏览器,其他浏览器更改drvier
#需要测试的网页
dr.get('https://passport.cnblogs.com/user/signin')
#构建参数化,格式为[[,,,],[,,,],[,,,]...[,,,],
#最外面[]里的每个[]为一条用例,每条用例的项用,隔开
user_pass=[['1','1','错误的用户名登陆','login_username_error','lblUserNameError',u'用户名错误!'],
['','123456','不输入用户名登陆','login_username_null','lblUserNameError',u'请输入用户名!'],
['testuser','1','错误的密码登陆','login_password_error','lblUserPwdError',u'密码错误'],
['1','','不输入密码登陆','login_username_null','lblUserPwdError',u'请输入密码!']]
#参数化定义变量,变量名自定义,数量为需要变量的数量
#最多不超过参数化的数量,顺序与定义参数化的值顺序一致
for (a,b,c,d,e,f) in user_pass:
#输入用户名,定义a在最前面,所以对应用例的一个值
#find_element_by_id里的值为网页抓取到的元素
dr.find_element_by_id('input1').send_keys(a)
#输入密码,b为参数化的密码
dr.find_element_by_id('input2').send_keys(b)
#点击登陆,click()为点击事件
dr.find_element_by_id('signin').click()
sleep(1)
print (c)#c为参数化的测试目的
#get_screenshot_as_file为截图方法,path为路径
#d为