selenium中判断及定位问题?
1、is_displayed():判断元素是否显示
2、is_selected():判断元素是否选中状态,复选框按钮是否选中
3、浏览器页面中hidden或者是display=none的元素,selenium是没法定位到的
selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?
1、添加元素智能等待时间 driver.implicitly_wait(30)
2、try 方式进行 id,name,clas,xpath, css selector不同方式进行定位,如果第一种失败可以自动尝试第二种
3、Selenium保证元素成功率是通过元素的定位,当然它的定位方法很多,一定能有合适的。但是在自动化工程的实施过程中,
高质量的自动化测试不是只有测试人员保证的。需要开发人员规范开发习惯,如给页面元素加上唯一的name,id等,
这样就能大大地提高元素定位的准确性。当然如果开发人员开发不规范,我们在定位元素的时候尽量使用相对地址定位,这样能减少元素定位受页面变化的影响。只要我们元素定位准确,就能保证我的每一个操作符合我的预期
如何提高selenium脚本的执行速度?
Selenium脚本的执行速度受多方面因素的影响,如网速,操作步骤的繁琐程度,页面加载的速度,以及我们在脚本中设置的等待时间, 运行脚本的线程数等。所以不能单方面追求运行速度的,要确保稳定性,能稳定地实现回归测试才是关键。
可以从以下几个方面来提高速度:
1、减少操作步骤,如经过三四步才能打开我们要测试的页面的话,我们就可以直接通过网址来打开,减少不必要的操作。
2、中断页面加载,如果页面加载的内容过多,我们可以查看一下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页面加载。
3、在设置等待时间的时候,可以sleep固定的时间,也可以检测某个元素出现后中断等待也可以提高速度。
4、配置testNG实现多线程。在编写测试用例的时候,一定要实现松耦合,然后在服务器允许的情况下,尽量设置多线程运行提高执行速度。
自动化用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?
1、time.sleep( )
2、driver.implicitly_wait(30)
3、多用 try 捕捉,except处理异常
此时我们要分析出不稳定的原因,然后有针对性的去解决问题。主要有以下几个方面 :
1、网速问题:有的时候网页加载的比较慢,在程序执行的时候要操作的元素没有显示出来。这种情况比较常见, 运行一次网速好的时候通过了,再运行一次,页面没有打开,就不通过了。为了提高稳定性,我们只能牺牲运行时间了, 在经常检测失败的元素前加上等待时间,等要操作的元素出现之后再执行下面的操作。
2、Selelnium的原因:Selenium1.0和2.0还是有区别的,有些儿函数在2.0下运行确实时而有效,时面无效。 如果mouseover()函数,就是这种情况, 我们需要避免使用这类的函数。
3、多线程的时候,测试用例间相互影响。虽然多线程的时候运行速度比较快,但是如果用例之间的耦合性没有设计好, 也会影响的,如果用例A先于用例B执行的时候,就会影响到用例B;反之则没有问题。这种情况,如果你的自动化测试工程打算多线程的时候,提前就要把测试用例测试的耦合度比较松,尽量没有任何关系,因为多线程的执行顺序是不受控制的。
自动化用例的执行策略是什么?
1、自动化测试用例是用来监控的,在此目的下,我们就把自动化测试用例设置成定时执行的,如果每五分钟或是一个小时执行一次,在jenkins上创建一个定时任务即可。
2、必须回归的用例。有时候产品任何变动上线之前都需要回归执行。那我们就把测试用例设置成触发式执行,在jenkins上将我们的自动化测试任务绑定到开发的build任务上。当开发人员在仿真环境上部代码的时候,我们的自动化测试用例就会被触发执行。
3、不需要经常执行的测试用例。像全量测试用例,我们没有必要一直回归执行,必竟还是有时间消耗的,有些非主要业务线也不需要时时回归。这类测试用例我们就采用人工执行,在jenkins创建一个任务,需要执行的时候人工去构建即可。
什么是持续集成?
持续集成源于极限编程(XP),是一种软件实践,软件开发过程中集成步骤是一个漫长并且无法预测的过程。集成过程中可能会爆 发大量的问题,因此集成过程需要尽可能小而多,实际上持续集成讲的是不断的去做软件的集成工作。持续集成,最简单的形式 是包括一个监控版本控制(SVN等等)变化的工具。当变化被发觉时,这个工具可以自动的编译并测试你的应用。
id,name,class,xpath, css selector这些属性,你最偏爱哪一种,为什么?
推荐的定位方式的优先级
优先级最高:ID
优先级其次:name
优先级再次:CSS selector
优先级再次:Xpath
在项目中我们可能用的最多的是css或者xpath,那么针对这两种,我们优先选择css,原因在哪些?
1:css是配合html来工作,它实现的原理是匹配对象的原理,而xpath是配合xml工作的,它实现的原理是遍历的原理,所以两者在设计上,css性能更优秀
2:语言简洁,明了,相对xpath
定位元素的注意事项?
1、找到待定位元素的唯一属性
2、如果该元素没有唯一属性,则先找到能被唯一定位到的父元素/子元素/相邻元素,再使用层级方式定位。
3、不管哪种方式,以能定位到为准
webdriver client的原理是什么?
通过研究selenium-webdriver的源码,发现其实webdriver的实现原理并不高深莫测无法揣度。 当测试脚本启动firefox的时候,selenium-webdriver会首先在新线程中启动firefox浏览器。启动后selenium-webdriver会将 firefox绑定到特定的端口,绑定完成后该firefox实例便作为webdriver的remote server存在;
客户端(也就是测试脚本)创建1个session,在该session中通过http请求向remote server发送restful的请求,remote server解析请求,
完成相应操作并返回response;客户端接受response,并分析其返回值以决定是转到第3步还是结束脚本;这就是webdriver的工作流程,
看起来很复杂实际上当了解了webdriver的实现原理后,理解上述问题应该比较简单。
webdriver是按照server – client的经典设计模式设计的:
server端就是remote server,可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client发送请求并做出相应
client端简单说来就是我们的测试代码,我们测试代码中的一些行为,比如打开浏览器,转跳到特定的url等操作是以http请求的方式发送给被 测试浏览器,也就是remote server;remote server接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息;
自动化测试的优点?
1、 适用于回归测试
2、 具有一致性和可重复性,短时间重复执行多次
3、 减少人力物力,提高工作效率
4、 简单、重复的工作交给自动化,测试人员可以专注手工测试(比较复杂,需要逻辑思维判断的手工测试用例)
自动化测试的局限性?
1、 没有思维,不能进行主观判断
2、 逻辑复杂的用例,维护成本会比较高
3、 需求频繁变更,不适合使用自动化
4、 本身是一个程序,在不同平台执行结果可能不一样
5、 对测试人员的要求较高
6、 发现缺陷的能力不如手工测试"
自动化测试的流程?
自动化测试的过程是要在手工测试之后进行的,主要是将手工测试用例转化为自动化测试脚本,一般是用于回归测试。
1、需求分析和测试计划:分析自动化测试的可行性,设计自动化测试计划
2、测试设计:
2.1、需要对手工测试用例进行评估,一般选取正常场景的,复杂度不高,复用性高手工测试用例来转化为脚本,因为,用例越复杂,脚本越难维护。
2.2、我们项目中使用selenium工具来实现自动化,采用python语言开发脚本,基于unittest框架实现测试用例及执行。
2.3、需要构建测试架构,其中包含public部分(包括测试用例中公共的部分:邮件发送模块、数据库查询模块、日志记录模块、公共使用的登录模块等),testCases(存放测试用例),reports(存放测试报告),datas(用于存放参数化用数据表,可以是csv文件、excel文件等),还需要有一个maintest.py文件组织运行所需要的测试用例,在脚本写完后就要进行调试,直至调试正常为止。
2.4、在maintest.py主执行模块中,使用测试集的方式组织测试用例,使用HTMLTestRunner运行运行测试集,并生成HTML格式的报告
3、测试执行:执行测试脚本(无人值守),每天都会在jenkins(持续集式工具)中跑一次,跑完后生成html格式的自动化测试结果,发送给相关责任人(可以集成在脚本中,也可以在Jenkins中添加邮件插件)。如果失败的用例,定位并提交缺陷在禅道工具中。
4、测试总结:汇总测试报告,脚本维护及版本的升级
selenium的组成?
selenium ide,selenium rc,selenium webdriver,selenium grid
ide:selenium的可视化集成开发环境,火狐浏览器带的插件,协助开发自动化测试脚本,可以一定程度上提高开发脚本的效率
rc:
webdriver:服务器端和客户端,服务器端是指打开的浏览器,客户端就是开发的脚本(python,java,ruby,c#)
grid:1.分布式脚本执行,提高执行效率,缩短执行时间;2.兼容性测试
自动化测试用例编写原则?
(1)以正向的业务流程为主
(2)一个自动化测试用例是一个完整的业务场景,从打开浏览器开始,到退出浏览器结束
(3)每个自动测试用例是独立的,互不影响,写完一个测试用例要进行系统还原
(4)自动化测试用例,不需要每一个步骤都写预期结果,在需要检查的点对应的位置给出预期结果。
(5)一个自动化测试用例尽量覆盖一个功能点。
wedriver对网页元素的定位的8种方式?
id()
name()
class_name()
tag_name()
link_text()
partial_link_text()
xpath()
css_selector()
什么是自动化测试?
自动化测试是一种使用自动化工具编写和执行测试人员测试脚本和案例的技术。
自动化测试的主要目标是减少手动运行的测试用例数量,而不是完全取消手动测试。
什么时候自动化测试?
重复性任务
使用多个数据集进行测试
回归测试用例
什么时候不自动化测试?
当受测试的应用程序频繁更改时
一次测试案例
临时 - 随机测试
良好的自动化工具的主要特征是什么?
测试环境支持且易于使用
良好的调试设施
强大的物体识别
对象和图像测试能力
对象识别
测试数据库
支持多个框架
软件自动化测试中使用的框架有哪些类型?
数据驱动的自动化框架
关键字驱动的自动化框架
模块化自动化框架
混合自动化框架
执行自动化测试时的脚本标准是什么?
统一命名约定。
每10行代码3行注释
足够的缩进。
强大的错误处理和恢复方案
尽可能使用框架
哪些是最受欢迎的自动化测试工具?
HP UFT
Selenium
简述UFT?
UFT是一种商业自动化工具,支持各种测试环境Web,桌面,SAP,Delphi,Net,ActiveX,Flex,Java,Oracle,Mobile,PeopleSoft,PowerBuilder,Siebel,Stingray,Visual Basic等。
脚本语言是VBScript。该工具可与HP ALM(测试管理工具)和HP LoadRunner(性能测试工具)很好地配合使用。
UFT的突出特点包括业务流程测试,关键字驱动框架,XML支持,强大的检查点,测试结果。
你觉得UI自动化测试最大的缺陷是什么?
不稳定
可靠性
不易维护
成本与收益
什么是断言?
1、断言的英文是assertion,断言检查的英文是assertion checking。
2、断言是指定一个程序必须已经存在的状态的一个逻辑表达式,或者执行期间判断预期与实际结果是否一致的语句
自动化测试脚本失败的原因有哪些?
脚本失败的原因大体如下:
1)可能是测试环境不稳定(应对方案:加入隐式等待时间);
2)开发修改了代码没通知到测试人员修改脚本;(应对方案:找开发来确定下问题)
3)开发引入了新的问题(应对方案:如果是脚本问题,就修改脚本,如果是系统的问题,就提交问题单。)
一般常见的验证码处理方式有以下几种?
1、去掉验证码:对于开发人员来说,只是把相关的代码注释掉,适用于测试环境,不适用于正式环境。
2、设置万能验证码:不取消验证码,而是在程序中留一个“后门”,即设置一个“万能验证码”。
3、验证码识别技术:例如,可以通过python-tesseract来识别图片验证码,但是市面上的验证码形式繁多,大多验证码识别技术,识别率都很难达到100%。
4、记录cookie:通过向浏览器中添加cookie可以绕过登录的验证码。