Selenium Python AttributeError:“ NoneType”对象没有属性“ send_keys”

时间:2020-08-26 08:31:33

标签: python selenium testing selenium-webdriver selenium-chromedriver

我是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可以解决问题,但是我仍然找不到解决它的方法。有人可以帮忙吗?欣赏它。谢谢。

1 个答案:

答案 0 :(得分:1)

问题具有函数返回类型。看到代码的结构后,我可以假定您正在某个设置类中创建WebDriver driver,并将其传递给周围。

现在,您需要了解何时不向python中的函数添加返回类型,默认情况下它将返回None。结果,设置方法是将self.driver设置为None

请在您的设置方法中添加return driver语句,它应该可以工作。