首页 > 解决方案 > Selenium Python AttributeError:“NoneType”对象没有属性“send_keys”

问题描述

我是 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' object has no attribute 'send_keys',所以我认为包括 waits/sleep 可以解决问题,但我仍然找不到解决方法。任何人都可以帮忙吗?欣赏它。谢谢。

标签: pythonseleniumtestingselenium-webdriverselenium-chromedriver

解决方案


问题在于函数返回类型。当看到你的代码结构时,我可以假设你正在WebDriver driver 一些设置类中创建你的并传递它。

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

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


推荐阅读