我是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',所以我认为包括waits / sleep可以解决问题,但是我仍然找不到解决它的方法。有人可以帮忙吗?欣赏它。谢谢。
答案 0 :(得分:1)
问题具有函数返回类型。看到代码的结构后,我可以假定您正在某个设置类中创建WebDriver driver
,并将其传递给周围。
现在,您需要了解何时不向python中的函数添加返回类型,默认情况下它将返回None
。结果,设置方法是将self.driver设置为None
。
请在您的设置方法中添加return driver
语句,它应该可以工作。