#csv 文件读取
import csv
class CsvDate():
def Date(self):
csv_path = r"E:\QQ File\TestRace\testdata.csv"
with open(csv_path, "r", encoding="utf-8") as f:
csvreader = csv.reader(f)
data_list = []
i=0
for getDate in csvreader:
if i!=0:
data_list.append(getDate)
i+=1
return data_list
if __name__ == '__main__':
DateClass = CsvDate()
Date = DateClass.Date()
print(Date)
打印结果 [['5555222', '九月十四日1'], ['5555223', '九月十四日2'], ['5555224', '九月十四日3'], ['5555225', '九月十四日4']]
#测试用例
import time
import unittest
import ddt
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from csvv import CsvDate
class Test_Question_three(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
self.driver.get("https://litemall.hogwarts.ceshiren.com/#/login?redirect=%2Fdashboard")
self.driver.maximize_window()
self.driver.implicitly_wait(3)
def tearDown(self):
self.driver.quit()
@ddt.data(*CsvDate().Date())
@ddt.unpack
def test_Question_three(self,data1,data2):
ele1 = self.driver.find_element(By.NAME, "username")
ele1.clear()
ele1.send_keys("manage")
ele2 = self.driver.find_element(By.NAME, "password")
ele2.clear()
ele2.send_keys("manage123")
self.driver.find_element(By.TAG_NAME, "button").click()
self.driver.find_element(By.CLASS_NAME, "el-submenu__title")[2].click()
self.driver.find_element(By.XPATH, "//*[text()='商品列表']").click()
self.driver.find_element(By.XPATH, "//*[text()='添加']").click()
ele3 = self.driver.find_element(By.XPATH,"//*[@id='app']/div/div[2]/section/div/div[1]/div/form/div[1]/div/div[1]/input" )
ele3.send_keys(data1) # 输入CSV数据
ele4 = self.driver.find_element(By.XPATH,
"//*[@id='app']/div/div[2]/section/div/div[1]/div/form/div[2]/div/div/input")
ele4.send_keys(data2) # 输入CSV数据
self.driver.find_element(By.XPATH, "//*[text()='上架']").click()
time.sleep(2)
if __name__ == '__main__':
unittest.main()
报错信息 TypeError: test_Question_three() missing 2 required positional arguments: 'data' and 'data2'
问题点: 要在测试类Test_Question_three上加@ddt.ddt,否则会报错
代码修改如下:
#csv 文件读取
import csv
class CsvDate():
def Date(self):
csv_path = r"E:\QQ File\TestRace\testdata.csv"
with open(csv_path, "r", encoding="utf-8") as f:
csvreader = csv.reader(f)
data_list = []
i=0
for getDate in csvreader:
if i!=0:
data_list.append(getDate)
i+=1
return data_list
#测试用例
import time
import unittest
import ddt
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from csvv import CsvDate
@ddt.ddt
class Test_Question_three(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
self.driver.get("https://litemall.hogwarts.ceshiren.com/#/login?redirect=%2Fdashboard")
self.driver.maximize_window()
self.driver.implicitly_wait(3)
def tearDown(self):
self.driver.quit()
@ddt.data(*CsvDate().Date())
@ddt.unpack
def test_Question_three(self,data1,data2):
ele1 = self.driver.find_element(By.NAME, "username")
ele1.clear()
ele1.send_keys("manage")
ele2 = self.driver.find_element(By.NAME, "password")
ele2.clear()
ele2.send_keys("manage123")
self.driver.find_element(By.TAG_NAME, "button").click()
self.driver.find_element(By.CLASS_NAME, "el-submenu__title")[2].click()
self.driver.find_element(By.XPATH, "//*[text()='商品列表']").click()
self.driver.find_element(By.XPATH, "//*[text()='添加']").click()
ele3 = self.driver.find_element(By.XPATH,"//*[@id='app']/div/div[2]/section/div/div[1]/div/form/div[1]/div/div[1]/input" )
ele3.send_keys(data1) # 输入CSV数据
ele4 = self.driver.find_element(By.XPATH,
"//*[@id='app']/div/div[2]/section/div/div[1]/div/form/div[2]/div/div/input")
ele4.send_keys(data2) # 输入CSV数据
self.driver.find_element(By.XPATH, "//*[text()='上架']").click()
time.sleep(2)
if __name__ == '__main__':
unittest.main()
这个报错说明test_Question_three()
方法缺少两个必需的位置参数:data
和data2
。根据代码中的@ddt.unpack
装饰器,测试方法的参数应该与@ddt.data
装饰器传递的csv数据的列数相匹配。
请确保@ddt.data
装饰器传递的csv数据有两列,并在test_Question_three()
方法中正确命名和使用这两个参数。例如:
@ddt.data(*CsvDate().Date())
@ddt.unpack
def test_Question_three(self, data1, data2):
# test logic
请检查一下你的csv数据是否包含了正确的列数,并确保参数名称与csv数据列的内容一致。
如果问题仍然存在,请提供更多相关的代码和示例数据,以便我能够更好地帮助你解决问题。
【相关推荐】