1、appium中xpath元素定位不到什么原因
1)xpath编写错误,或者页面有所变动
2)操作速度过快,被定位的元素没有加载出来
2、在web定位中,怎么维护定位问题(界面发生变化)
1)不要使用绝对坐标,使用相对坐标
2)把定位方法和元素单独封装,页面和测试case独立起来,减少代码维护量,做分层pageobject模式
3、web自动化测试,定位不到元素的原因及解决方案
1)动态id定位不到元素
使用xpath的相对路径方法或者cssSelector查找该元素
2)iframe原因定位不到元素
(1)需要查找的元素在某个框架里(frame)
方法:定位到给框架里,查找元素
driver.switchTo().frame(“login.frame”)
driver.switchTo().frame(driver.findElement(By.cssSelector(“iframe[frmeborder]”)))
driver.switchTo().frame(driver.findElement(By.tagName(“iframe”)));
(2)要返回到iframe外查找元素
问题:进入某个框架,找到某元素,又想找一个框架外的元素
方案:需要跳出该框架再找元素
driver.switchTo().parentFrame();
(3)不在同一个frame里面查找元素
问题:页面左边一栏属于left_frame,右侧属于right_frame,在左边需要定位右边
方案:切换到默认content driver。switchTo().defaultContent()
3)xpath描述错误----修改路径写法,或者使用css
4)页面元素未加载完成
问题:在找元素前,页面还没加载好,所以有些元素不存在
方案:等待时间,三种(强制等待,隐式等待,显示等待)
5)页面元素隐藏
问题:窗口不在最大化的情况下,前端页面元素只显示局部
方案:在找元素之前,将浏览器窗口最大化,就能显示所有的元素
driver.manage().window().maximize();
4、appium原理解析
appium是基于c/s模式的,客户端/服务端的
appium是基于webdriver协议添加对移动设备自动化api扩展而成的
appium:
会首先开启一个监听4723端口的server,接受测试脚本发送过来的对应请求,再将对应的请求发送给中间件bootstrap.jar(这里的请求不是整个文件,而是对应的命令请求,一个点击就是一个命令)
bootstrap.jar:
监听4724端口由appium发送过来的相关请求,并且将请求转换成Uiautomator可以识别的命令发给Uiautomator处理
bootstrap作用:
Bootstrap是Appium在初始化的时候推送到安卓手机上的一个UiAutomator测试脚本,该脚本的唯一一个测试方法所做的事情是在手机端开启一个SocketServer(通信模块),用来监听Appium从PC端过来的命令发送给UiAutomator来执行处理。
它会监听4724端口获得命令然后pass给UiAutomator来做处理。
bootstrap在appium中的角色
首先,Bootstrap是uiautomator的测试脚本,它的入口类bootstrap继承于UiautomatorTestCase,所以Uiautomator可以正常运行它,它也可以正常使用uiautomator的方法,这个就是appium的命令可以转换成uiautomator命令的关键;
其次,bootstrap是一个socket服务器,专门监听4724端口过来的appium的连接和命令数据,并把appium的命令转换成uiautomator的命令来让uiautomator进行处理;
最后,bootstrap处理的是从pc端过来的命令,而非一个文件
所使用的技术:
android使用instrumentation和uiautomator,ios使用uiautomation,
同时还支持firefox,并可扩展其他平台,默认开启4723端口接受wedriver请求,4723端口是appium服务的,专门和脚本打交道;
默认开启4724端口用于和android设备通讯;
5、前端和后台的bug定位
1、前端bug定位:功能,界面和兼容性有关
分析出属于接口的问题还是前端的问题
2、后台bug定位:根据后台日志
一台服务器可以部署多个应用
cat usr/local/测试服务器名称/logs 先进入到服务器的logs目录下
tail -f catalina.out 监视日志文件最新的内容
3、获取日志中常见问题:
1)编码问题
2)空指针:程序问题,一般是没有考虑到为空情况,或者主外键约束的数据为空,或者删除关联数据,导致为空
3)长度过长:测试环境修改数据库字段长度后生产环境未修改,导致报错
4)非法数据
5)内存溢出:重启
4、故障无法重现时看日志
1)看日志:根据日志定位原因,在测试环境根据日志提示构造测试环境
2)测试环境的配置与实际的工程环境和配置有哪些差异,可能的原因
测试:
1、提前测试:在需求阶段接入测试
2、让更多的人参与测试:开发人员自测,产品运营体验,发布前评审
3、规范测试流程:测试计划,测试方案,测试case都需要评审和多次与产品,开发通过
4、一定要多沟通