代码报错解析

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

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里进行操作,
如点击,输入等操作。如果向上滑到页面最底部,向下滑到页面最顶部,向左滑到最右部,向右滑到最左部还找不到,就报错。
在下一篇博客封装滑屏操作。
二,TimeoutException

TimeoutException超时错误,即没找到元素。

三,UnicodeDecodeError: 'gbk' codec can't decode byte 0xa5 in position 59: illegal multibyte sequence

f = open('文件地址','r',encoding='UTF-8')
f.read()
这样就可以读取出来了

比如

import yaml

def main():

with open('./data.yml', 'r', encoding='UTF-8') as f:
data = yaml.load(f)
print(type(data))
print(data)

if __name__ == '__main__':
main()

代码提示单词

AttributeError:  属性错误,

NameError:试图访问的变量名不存在

SyntaxError:语法错误,代码形式错误

Exception:所有异常的基类,因为所有python异常类都是基类Exception的其中一员,异常都是从基类Exception继承的,并且都在exceptions模块中定义。

IOError:一般常见于打开不存在文件时会引发IOError错误,也可以解理为输出输入错误

KeyError:使用了映射中不存在的关键字(键)时引发的关键字错误

IndexError:索引错误,使用的索引不存在,常索引超出序列范围,什么是索引

TypeError:类型错误,内建操作或是函数应于在了错误类型的对象时会引发类型错误

ZeroDivisonError:除数为0,在用除法操作时,第二个参数为0时引发了该错误

ValueError:值错误,传给对象的参数类型不正确,像是给int()函数传入了字符串数据类型的参数。

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