码迷,mamicode.com
首页 > Web开发 > 详细

AttributeError: 'NoneType' object has no attribute 'click' 出现原因,解决办法

时间:2020-04-07 17:00:15      阅读:1084      评论:0      收藏:0      [点我收藏+]

标签:src   文件   net   one   python   说明   cti   code   定位   

AttributeError: ‘NoneType‘ object has no attribute ‘click‘这句话的意思是元素没有点击的这个属性。同理,AttributeError: ‘NoneType‘ object has no attribute ‘send_keys()’,是没有输入值的属性。

当python代码出现这种问题时,一般有2种情况。

一是没有找到这个元素,比如你想在设置中点击“语言和输入法”,但没定位到这个元素。在page页面中,你定义的方法没错,通过id,xpath,等方法找元素也没错。死活找不出原因时,报错的原因是uiautomatorviewer未扫描到控件。比如扫描的是第一屏,你的元素需要滑到第三屏才出现。在第一屏找不到你的元素所以会报错。这是第一种情况。

第二种情况是元素确实被uiautomatorviewer扫描到。但还报错,说明这个元素真没这个属性。但这种机率很小,因为你不会给按钮加清空操作,给文本框加点击操作。

技术图片

 

 以上个图片为例,错误原因是第一种,通过find_ele_ById_And_content方法找不到元素。解决思路:可在base_action.py文件中找到你定义的这个方法,

def find_ele_ById_And_content(self, loc, content):
list = self.driver.find_elements(By.ID,loc[1])
for i in list:
if i.get_attribute(‘text‘) == content:
return i
这行代码正确,那么我们就一步步print,如果哪一步不print,则哪一行出错,
def find_ele_ById_And_content(self, loc, content):
list = self.driver.find_elements(By.ID,loc[1])
print(‘方法执行到这了‘)
print(len(list)) #这行和上一行是检查list的长度,print(list)是list的内容。要上一行的目的是方便看你打印这行的位置
for i in list:
t1 = i.get_attribute(‘text‘)
print(t1) #打印list里元素的属性text
if t1 == content:
print(i) #打印元素
return i
这是一种思路,用这种方法还是解决不了。元素未显示的解决办法是在base_action里封装一个滑屏找元素,如果找到就返回这个元素,这个元素在page里进行操作,
如点击,输入等操作。如果向上滑到页面最底部,向下滑到页面最顶部,向左滑到最右部,向右滑到最左部还找不到,就报错。
在下一篇博客封装滑屏操作。

AttributeError: 'NoneType' object has no attribute 'click' 出现原因,解决办法

标签:src   文件   net   one   python   说明   cti   code   定位   

原文地址:https://www.cnblogs.com/noon-12/p/12654258.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!