我是Selenium WebDriver的新手,目前正在使用Python编写脚本。现在我想应用参数,我使用Excel应用了数据驱动的方法。基本上只有第一个循环可以,它可以读取和写入第一行的数据,但之后就不能了。
首先,我在Python文件中创建这个(作为新模块(:
import openpyxl
def getRowCount(file, sheetName):
workbook = openpyxl.load_workbook(file)
sheet = workbook.get_sheet_by_name(sheetName)
return(sheet.max_row)
def getColumnCount(file, sheetName):
workbook = openpyxl.load_workbook(file)
sheet = workbook.get_sheet_by_name(sheetName)
return(sheet.max_column)
def readData(file, sheetName, rownum,columno):
workbook = openpyxl.load_workbook(file)
sheet = workbook.get_sheet_by_name(sheetName)
return sheet.cell(row=rownum, column=columno).value
def writeData(file,sheetName,rownum,columno,data):
workbook = openpyxl.load_workbook(file)
sheet = workbook.get_sheet_by_name(sheetName)
sheet.cell(row=rownum, column=columno).value = data
workbook.save(file)
接下来,我写下这段代码,在我的登录和注销过程中包括数据驱动的测试:
path="<<my excel path>>"
rows=XLUtils.getRowCount(path, 'Sheet1')
for r in range(2,rows+1):
email=XLUtils.readData(path,"Sheet1",r,1)
password=XLUtils.readData(path,"Sheet1",r,2)
driver.implicitly_wait(100)
time.sleep(3)
driver.find_element_by_xpath('<<my email field xpath element>>').send_keys(email)
driver.implicitly_wait(100)
time.sleep(3)
driver.find_element_by_xpath('<<my password field xpath element>>').send_keys(password)
driver.implicitly_wait(100)
time.sleep(3)
driver.find_element_by_xpath('<<my click login xpath element').click()
driver.implicitly_wait(100)
time.sleep(3)
if driver.title=="<<to verify page title>>":
print("test passed")
XLUtils.writeData(path,"Sheet1",r,3,"test passed")
else:
print("test failed")
XLUtils.writeData(path, "Sheet1", r, 3, "test failed")
# Logout
driver.find_element_by_css_selector("<<my logout element>>").click()
time.sleep(2)
driver.find_element_by_css_selector("<<my logout element>>").click()
time.sleep(3)
我得到了错误AttributeError:"NoneType"对象没有属性"send_keys",所以我认为包括等待/睡眠可以解决问题,但我仍然找不到解决问题的方法。有人能帮忙吗?非常感谢。谢谢。
Issue是函数返回类型。看到代码的结构,我可以假设您正在某个设置类中创建WebDriver driver
并将其传递。
现在您需要了解,当您不向python中的函数添加返回类型时,默认情况下它会返回None
。因此,设置方法是self-driver设置为None
。
请将return driver
语句添加到您的设置方法中,它应该可以工作。