首页 > 技术文章 > 【Python】通过python代码实现demo_test环境的登录,通过csv/txt/excel文件批量添加课程并开启课程操作--(刚开始 项目 页面 模块 元素这种鸟 被称作pageobject 等这些搞完 然后把你的定位器、数据 和脚本在分离 就是传说中那个叫数据驱动 的鸟)

zhuzhubaoya 2018-03-29 15:43 原文

一、
1.通过csv文件批量导入数据


1
from selenium import webdriver 2 from time import ctime,sleep 3 import csv 4 #循环读取每一行每一个字段csv 5 bid_info = csv.DictReader(open('E:\\script\\python-script\\demo_test_courses.csv','r')) 6 dict_data = [] 7 for lines in bid_info: 8 if bid_info.line_num == 1: 9 continue 10 else: 11 dict_data.append(lines) 12 row_num = len(dict_data)#计算csv文件行数,从而得出i的循环限制数 13 # print('this is all the data---' + str(dict)) 14 15 i = 0#初始化循环次数值 16 while(i < row_num): 17 #print('this is'+str(i)+'row----'+ str(dict_data[i])) 18 #print(dict_data[i]) 19 print((dict_data[i])['first_name']) 20 print((dict_data[i])['last_name']) 21 #创建课程 22 driver = webdriver.Chrome() 23 driver.get("http://demo.pingnanlearning.com/test/login/index.php") 24 driver.find_element_by_id("username").send_keys("grace") 25 driver.find_element_by_id("password").send_keys("1") 26 driver.find_element_by_id("loginbtn").click() 27 driver.find_element_by_link_text(u"系统管理").click() 28 driver.find_element_by_link_text(u"添加课程").click() 29 driver.find_element_by_id("107").click() 30 driver.find_element_by_class_name("kc_btn_next").click() 31 driver.find_element_by_name("fullname").send_keys((dict_data[i])['first_name']) 32 driver.find_element_by_id("idnumber").send_keys((dict_data[i])['last_name']) 33 sleep(5) 34 driver.find_element_by_xpath("//*[@id=\"course2\"]/div[2]/input[2]").click() 35 sleep(5) 36 driver.find_element_by_xpath("//*[@id=\"course3\"]/div[3]/input[2]").click() 37 sleep(5) 38 #课程开启操作 39 driver.find_element_by_xpath("//*[@id=\"course4\"]/div[2]/input[3]").click() 40 # a=driver.find_element_by_class_name("btn_switch").value 41 # a=1 42 #创建课程后将课程由默认状态“禁用”变更为“启用” 43 driver.find_element_by_css_selector("#tip_s2>label").click() 44 i += 1

 对应csv文件所在位置设定如下图:

csv中文件内容如下:

 运行成功截图:

 2.将上方读取的csv文件内容写入到已经创建好的csv文件中。

 1 #读取csv文件再讲读取的数据写入csv文件
 2 csvfile2 = open('E:\\script\\python-script\\demo_test_courses-w.csv','w',newline='')
 3 writer=csv.writer(csvfile2)
 4 i=0
 5 writer.writerow(('first_name','last_name'))
 6 while(i<row_num):
 7     print((dict_data[i])['first_name'],(dict_data[i])['last_name'])
 8     writer.writerow(((dict_data[i])['first_name'],(dict_data[i])['last_name']))
 9     i += 1
10 csvfile2.close()

 

——————————————————————————————————————————

零散思路记录:

with open("E:\\script\\python-script\\demo_test_courses.csv","r") as csvfile:
    reader=[each for each in csv.DictReader(csvfile)]
for row in reader:
    print(row['first_name'],row['last_name'])
   '''
    reader = csv.reader(csvfile)
    for i,rows in enumerate(csvfile):
        if i==3:
            row=rows
            print(row)

'''
'''    
    rows=[row for row in reader]
    print(rows)
   
    row=csvfile.readline()
    for row in reader:
        for row in reader:
            print(reader.line_num,row[0])
            print(len(csvfile))
'''

二、通过txt文件批量导入数据,读取fullname和idnumber

 1 txtfile=open("E:\\script\\python-script\\demo_test_a\\demo_test_courses.txt","r")#引用的txt文件
 2 un = txtfile.readline()#读取一行数据
 3 i = 0
 4 new = []#将读取的每一行数据以小数组subject为单元存放在一个大数组new中。
 5 while(i <2):#此处的2随着txt文件中行数的变化去自定义输入
 6     un=un.strip('\n')#去掉读取末尾的回车
 7     subject=un.split(',')#以逗号为分隔符读取数据
 8     new.append(subject)
 9     #print(new[i])
10     print(subject[0])#fullname读取
11     print(subject[1])#idnumber读取
12     un=txtfile.readline()
13     i+=1
14 txtfile.close()

放到场景中的代码记录:

 1 from selenium import webdriver
 2 from time import ctime,sleep
 3 #import csv
 4 import unittest,os,time
 5 #通过txt文件参数化课程名和课程编号
 6 txtfile = open("E:\\script\\python-script\\demo_test_a\\demo_test_courses.txt", "r")  # 用户名文件
 7 new = []
 8 un = txtfile.readline()  # 读取一行数据
 9 #un = txtfile.readline()
10 #循环读取每一行
11 i = 0
12 while(i <2):
13     un = un.strip('\n')  # 去掉读取末尾的回车
14     subject = un.split(',')  # 以逗号为分隔符读取数据
15     new.append(subject)
16     #创建课程
17     driver = webdriver.Chrome()
18     driver.get("http://demo.pingnanlearning.com/test/login/index.php")
19     driver.find_element_by_id("username").send_keys("grace")
20     driver.find_element_by_id("password").send_keys("1")
21     driver.find_element_by_id("loginbtn").click()
22     driver.find_element_by_link_text(u"系统管理").click()
23     driver.find_element_by_link_text(u"添加课程").click()
24     driver.find_element_by_id("107").click()
25     driver.find_element_by_class_name("kc_btn_next").click()
26     driver.find_element_by_name("fullname").send_keys(subject[0])
27     driver.find_element_by_id("idnumber").send_keys(subject[1])
28     print(subject[0])
29     print(subject[1])
30     sleep(5)
31     driver.find_element_by_xpath("//*[@id=\"course2\"]/div[2]/input[2]").click()
32     sleep(5)
33     driver.find_element_by_xpath("//*[@id=\"course3\"]/div[3]/input[2]").click()
34     sleep(5)
35     driver.find_element_by_xpath("//*[@id=\"course4\"]/div[2]/input[3]").click()
36     # a=driver.find_element_by_class_name("btn_switch").value
37     # a=1
38     #创建课程后将课程由默认状态“禁用”变更为“启用”
39     driver.find_element_by_css_selector("#tip_s2>label").click()
40     un = txtfile.readline()#读取txt文件中的下一行数据
41     i += 1#控制循环次数+1
42 txtfile.close()

 

 

文件在电脑上的位置及文件基本内容:

三、通过excel文件批量导入数据,读取fullname和idnumber

举例说明excel读取相关知识点:

 1 from selenium import webdriver
 2 from time import ctime,sleep
 3 import xlrd
 4 
 5 #通过xls文件参数化课程名和课程编号
 6 xlsfile=r"E:\script\python-script\demo_test_a\demo_test_courses_xls.xls"#打开指定路径中的xls文件
 7 book=xlrd.open_workbook(xlsfile)#得到Excel文件的book对象,实例化对象
 8 sheet0 = book.sheet_by_index(0) # 通过sheet索引获得sheet对象
 9 print("1、",sheet0)
10 sheet_name = book.sheet_names()[0]# 获得指定索引的sheet表名字
11 print ("2、",sheet_name)
12 sheet1 = book.sheet_by_name(sheet_name)# 通过sheet名字来获取,当然如果知道sheet名字就可以直接指定
13 nrows = sheet0.nrows    # 获取行总数
14 print ("3、",nrows)
15 #循环打印每一行的内容
16 for i in range(nrows):
17     print( sheet1.row_values(i))
18 ncols = sheet0.ncols    #获取列总数
19 print("4、",ncols)
20 row_data = sheet0.row_values(0)     # 获得第1行的数据列表
21 print (row_data)
22 col_data = sheet0.col_values(0)     # 获得第1列的数据列表
23 print("5、",col_data)
24 # 通过坐标读取表格中的数据
25 cell_value1 = sheet0.cell_value(0, 0)
26 print("6、",cell_value1)
27 cell_value2 = sheet0.cell_value(0, 1)
28 print ("7、",cell_value2)

对应成功图图和文件夹位置及文件内容:

 demo环境通过excel批量创建课程代码及截图展示:

 1 from selenium import webdriver
 2 from time import ctime,sleep
 3 import xlrd
 4 
 5 #通过xls文件参数化课程名和课程编号
 6 xlsfile=r"E:\script\python-script\demo_test_a\demo_test_courses_xls.xls"#打开指定路径中的xls文件
 7 book=xlrd.open_workbook(xlsfile)#得到Excel文件的book对象,实例化对象
 8 sheet0 = book.sheet_by_index(0) # 通过sheet索引获得sheet对象
 9 print("1、",sheet0)
10 sheet_name = book.sheet_names()[0]#aaaaa 获得指定索引的sheet表名字
11 print ("2、",sheet_name)
12 sheet1 = book.sheet_by_name(sheet_name)# 通过sheet名字来获取,当然如果知道sheet名字就可以直接指定
13 nrows = sheet0.nrows    # 获取行总数
14 print ("3、",nrows)
15 #循环打印每一行的内容
16 for i in range(nrows):
17     print( sheet1.row_values(i))
18 '''   
19 ncols = sheet0.ncols    #获取列总数
20 print("4、",ncols)
21 row_data = sheet0.row_values(0)     # 获得第1行的数据列表
22 print (row_data)
23 col_data = sheet0.col_values(0)     # 获得第1列的数据列表
24 print("5、",col_data)
25 '''
26 #循环读取每一行
27 i = 1
28 while(i < nrows):
29 
30     # 通过坐标读取表格中的数据
31     cell_value1 = sheet0.cell_value(i, 0)
32     #print("first_name:", cell_value1)
33     cell_value2 = sheet0.cell_value(i, 1)
34     #print("last_name:", cell_value2)
35     #创建课程
36     driver = webdriver.Chrome()
37     driver.get("http://demo.pingnanlearning.com/test/login/index.php")
38     driver.find_element_by_id("username").send_keys("grace")
39     driver.find_element_by_id("password").send_keys("1")
40     driver.find_element_by_id("loginbtn").click()
41     driver.find_element_by_link_text(u"系统管理").click()
42     driver.find_element_by_link_text(u"添加课程").click()
43     driver.find_element_by_id("107").click()
44     driver.find_element_by_class_name("kc_btn_next").click()
45     driver.find_element_by_name("fullname").send_keys(cell_value1)
46     driver.find_element_by_id("idnumber").send_keys(cell_value2)
47     sleep(5)
48     driver.find_element_by_xpath("//*[@id=\"course2\"]/div[2]/input[2]").click()
49     sleep(5)
50     driver.find_element_by_xpath("//*[@id=\"course3\"]/div[3]/input[2]").click()
51     sleep(5)
52     driver.find_element_by_xpath("//*[@id=\"course4\"]/div[2]/input[3]").click()
53     # a=driver.find_element_by_class_name("btn_switch").value
54     # a=1
55     #创建课程后将课程由默认状态“禁用”变更为“启用”
56     driver.find_element_by_css_selector("#tip_s2>label").click()
57     i += 1

对应文件位置及内容截图:

 

推荐阅读