21条自动化测试过程中遭遇的问题及解决思路

记录自动化中遇到的一些错误及解决思路,会持续更新(根据个人情况不同,错误解决方法不同)

1、找不到元素,脚本报“NoSuchElementException:Unable to find element”,或者"定位到了,不能操作,点击无效"

  1) 首先查看自己的“属性值”是否写正确

  2) 元素的标签不唯一,默认找到第一个

  3)向上查看,元素是否在frame或iframe框架中

  4) 查看元素是否在新打开的页面中,需要切换到新窗口

  5) 换其它的定位方式:id/name/class name/tag name/link text/xpath/css selector

  6) 检查元素属性是否是会变动的、是否是隐藏的

  7)添加等待时间sleep(),implicitly_wait(),WebDriverWait(driver, 10, 1).until(定位的元素, messages)

  8) 查看标签的属性是否有“style=’display:none’->。元素不显示。属性改为block

  9) 查看标签的属性是否有‘onclick=return false’->。取消点击。属性改为false(在百度首页,登陆的属性就是这个)

  10) 针对于9和8这两种情况,我在网上搜到的结果是:执行js修改属性(这种方法我没有试过,不知道有没有效果)

  js=”document.getElementById(‘title‘).style.display=’block’”

  driver.execute_script(js)

2、出现“object is not iterable”:

  1) 首先查看脚本,测试用例出现问题

  2) 组织用例时出现错误(我开始是用for循环遍历y,加入测试集合中,返回集合,老是会出现错误,最后改成下方代码,直接返回y,解决问题)

3、出现“Indentation Error”: 是语法问题,脚本代码没有正确对齐

4、使用PO设计模式封装的页面元素类,都有初始化函数“__init__”

5、页面元素调用Page类时候,Page函数,后面括号的“self”不用写

6、Page的初始化包含(self,driver)两个元素,在页面封装类中,初始化中调用方式为

Page.__init__(self,driver)

7、类中定义变量,比如x=“hello”,调用使用:self.x

8、在测试用例调用自己页面封装的类时,经过实例化后po=Lzsp(driver),定义函数时候, 不需要再括号中写self

9、提示在页面封装类中没有basePage.py文件中定义好的函数问题:

  1) 新建名字为module_basePage.pth文件,内容为“basePage.py文件”存放路径:例如(“d:\\test\\page”)

  2) 进入python的安装目录,将文件放到python3\lib\sit-packages文件夹下

  3) 在测试用例中导入其他文件夹模块引入:import sys

  4) sys.path.append(“..”)

  5) from .... import ...

10、页面元素封装时候,定位方式一定要写正确,否则会出错

11、进行参数化的时候,读取数据的文件里面代码:“使用绝对地址,加双斜线”

12、运行自动化脚本时候将鼠标放到屏幕中间或者下方,(有可能切换窗口时定位不到)

13、出现”parater must be str“:使用参数有问题,(我的是因为二次定位写的方式有问题)

  1) 在封装页面元素定位方式时,经常会会遇到二次定位

  2) 第一次定位调用基础类的方法,第二次定位就正常写就行了,例子如下:

  3) 我是使用:x=self.find_element(locator).find_element_by_id(locator)

  4) 因为我在页面封装中将把定位方式和元素都放到列表中,第二次的元素不写定位方式,只写元素

14、在window命令界面下使用:”python 文件名.py >>report/log.txt 2>&1”命令把结果写入文本中

15、在页面封装中,类的初始化使用如下样式:

  def __init__(self,driver):

    Page.__init__(self,driver)

16、打印输出时显示“not all arguments curerted during string format”是说明前后参数不对应:%前面是一个“%s”,而后面的参数是(“xy”,“xy”)两个

17、同一个模块中的两个类,第二个调用第一个类的方法,直接使用“继承”,2继承1,

  def __init__(self,driver):

    Logger.__init__(self,’OA’)

    self.log=self.getlog()

    self.driver=driver

18、Python对文件进行“复制”和“改名”

  1) 首先引入os模块:import os

  2) 复制:os.system(“copy 文件名.txt 新文件名.txt”)

  3) 改名:os.rename(“文件名.txt”,”新文件名.txt”

19、读取txt文件中的汉字和字符打印却是一串编码,像这种:(b'\xef\xbb\xbf\xe5\xa5\xbd\xe7\x9a\x84\r\n')

  解决代码如下:

  x=open(“2.txt”,”rb”)

  y=x.readlines()

  for i in y:

j=i.decode(‘utf-8’)  :在原有代码增加一句

    Print (j)

  x.close()

20、出现“str object is not callable”的问题

  原因是:使用定义的变量名字与内置模块名字相同,(我的原因是:在basePage.py文件中,“得到文本的函数,element.txt后面多加了一对括号”,取消就好了)

  针对自己的脚本,检查变量的名字,相同的更改一下,

21、在编写自动化用例中,会打开多个窗口,经常会遇到,第一次得到的句柄列表为a=[1,2],第二次得到的句柄列表是b=[1,3,2],偶尔不会

  按照顺序排序(一般都是按顺序排的),要切换到句柄3,

  可以使用如下方法得到句柄3:

c=list(set(b)-set(a))=[3]    :先把a和b变成集合,再取b不同于a的元素

  最后再转换为列表赋值给变量c

driver.switch_to.window(c[0])   :切换到新窗口c

作者: qupan 博客地址:http://www.cnblogs.com/qupan/ 声明:本文已获作者授权转载,著作权归作者所有。

原文发布于微信公众号 - 开源优测(DeepTest)

原文发表时间:2018-08-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏MasiMaro 的技术博文

使用pyh生成HTML文档

最近在项目中需要将结果导出到HTML中,在网上搜索的时候发现了这个库,通过官方的一些文档以及网上的博客发现它的使用还是很简单的,因此选择在项目中使用它。 在使...

23010
来自专栏calmound

getchar

跟你分享个东西,我也是刚刚在网上查到的,和我想的差不多,呵呵~~~~ getchar是以行为单位进行存取的。 当用getchar进行输入时,如果输入的第一个字符...

38360
来自专栏阮一峰的网络日志

SASS用法指南

学过CSS的人都知道,它不是一种编程语言。 你可以用它开发网页样式,但是没法用它编程。也就是说,CSS基本上是设计师的工具,不是程序员的工具。在程序员眼里,CS...

36850
来自专栏草根专栏

Python数据分析(一): ipython 技巧!

不一定非得使用Jupyter Notebook,试试ipython命令行 安装 ipython 我只试过Windows 10环境下的。 1.安装python安装...

37760
来自专栏前端架构

再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结

ng-bind 单向数据绑定($scope -> view),用于数据显示,简写形式是 {{}}。

21130
来自专栏Youngxj

Chrome控制台console的基本用法

21850
来自专栏java一日一条

Vim 常用操作命令整理

24230
来自专栏优启梦

Chrome控制台console的基本用法

大家都有用过各种类型的浏览器,每种浏览器都有自己的特色,本人拙见,在我用过的浏览器当中,我是最喜欢Chrome的,因为它对于调试脚本及前端设计调试都有它比其它浏...

470120
来自专栏Coding+

Vim 快捷键说明及常用命令

16320
来自专栏代码GG之家

android MVVM开发模式(四)

android MVVM开发模式(四) 上节我们讲了自定义的@BindingAdapter,来扩展属性功能的时候,第一步添加了一个自定义属性 这个其实是多余的。...

19760

扫码关注云+社区

领取腾讯云代金券