Pytest Selenium elem.send_keys() causing TypeError: object of type 'NoneType' has no len()

Pytest Selenium elem.send_keys() causing TypeError: object of type 'NoneType' has no len()

我正在尝试将数据发送到登录文本框,但是当我使用 'send_keys' 时出现错误..

def wait_for_element(selenium, selenium_locator, search_pattern, wait_seconds=10):
    elem = None
    wait = WebDriverWait(selenium, wait_seconds)

    try:
        if (selenium_locator.upper() == 'ID'):
            elem = wait.until(
                EC.visibility_of_element_located((By.ID, search_pattern))
            )
    except TimeoutException:
        pass

    return elem

userid=os.environ.get('userid')
wait_for_element(selenium, "ID", 'username')
assert elem is not None
elem.click()
time.sleep(3)
elem.send_keys(userid)

tests\util.py:123: in HTML5_login elem.send_keys(userid) ..\selenium\webdriver\remote\webelement.py:478: in send_keys {'text': "".join(keys_to_typing(value)),


value = (None,)

def keys_to_typing(value):
    """Processes the values that will be typed in the element."""
    typing = []
    for val in value:
        if isinstance(val, Keys):
            typing.append(val)
        elif isinstance(val, int):
            val = str(val)
            for i in range(len(val)):
                typing.append(val[i])
        else:
          for i in range(len(val)):
         for i in range(len(val)):

E TypeError: object of type 'NoneType' has no len()

我不知道为什么当我让它通过断言并单击该元素时它说该元素属于 "NoneType"。当我 运行 测试时,我什至可以看到它点击元素!

这个错误信息...

elem.send_keys(userid) ..\selenium\webdriver\remote\webelement.py:478: in send_keys {'text': "".join(keys_to_typing(value)), value = (None,)
TypeError: object of type 'NoneType' has no len()

...暗示 send_keys() 方法在发送变量 userid.

的内容时遇到错误

尽管您已尝试使用变量 userid,但我没有看到在您的代码块中的任何地方声明了变量 userid .因此您会看到错误:

TypeError: object of type 'NoneType' has no len()


解决方案

初始化 userid 变量为:

userid = "Austin"

现在,执行您的测试。