合并步骤时出现Python“属性错误”

时间:2019-03-06 09:25:47

标签: python selenium

希望某人可以帮助新手解释下面的代码差异。
使用Python运行Selenium,并使用XPath和click()浏览页面。

这有效:

xpath = '//*[@id="blahblah"]'
date = driver.find_element_by_xpath(xpath)
date.click()
date.send_keys('todaysdate')

这不起作用:

xpath = '//*[@id="blahblah"]'
date = driver.find_element_by_xpath(xpath).click()
date.send_keys('todaysdate')

返回的错误是:

AttributeError: 'NoneType' object has no attribute 'send_keys'

示例之间有什么区别?

2 个答案:

答案 0 :(得分:3)

仅当date.click()返回日期时,您的代码才有效。事实并非如此(这很不寻常)。就目前而言,click()已执行,但返回了None,因此将send_keys设置为None的尝试失败。

答案 1 :(得分:3)

它不起作用,因为您试图将click()的返回值保存在日期中。 'click()'不返回任何内容,也就是None,因此,当您尝试对此NoneType对象调用send_keys时,会出现属性错误。

如果要在创建对象后调用一个对象的多个函数,最好将其保存在一个变量中,然后一个接一个地调用这些函数,而不是将所有的函数链接在一起并使代码成为调试的噩梦,更不用说在某些情况下牺牲可读性了。

这仍然是主观的,在某些情况下,将方法调用链接在一起是可行的方法(例如,节省一点内存)。但是,这种情况很少见。