用selenium工具做软件自动化测试的面试题及答案

用selenium工具做软件自动化测试的面试题及答案

2023年6月28日发(作者:)

⽤selenium⼯具做软件⾃动化测试的⾯试题及答案1、selenium中如何判断元素是否存在?答:isElementPresent

2、selenium中hidden或者是display = none的元素是否可以定位到?答:不可以定位到

3、selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素⼀定是可以点击的?答:(1)添加元素智能等待时间:itly_wait(30)(2)try ⽅式进⾏ id,name,clas,x path, css selector 不同⽅式进⾏定位,如果第⼀种失败可以⾃动尝试第⼆种(3)Selenium保证元素成功率是通过元素的定位,当然它的定位⽅法很多,⼀定能有合适的,但是在⾃动化⼯程的实施过程中,⾼质量的⾃动化测试不是测试⼈员所能保证的,是需要开发⼈员规范开发习惯,如给页⾯元素加上唯⼀的name,id等,这样就能⼤⼤地提⾼元素定位的准确性。当然如果开发⼈员开发不规范,我们在定位元素的时候尽量使⽤相对地址定位,这样能减少元素定位受页⾯变化的影响。只要我们元素定位准确,就能保证每⼀个操作符合预期结果

4、如何提⾼selenium脚本的执⾏速度?答:Selenium脚本的执⾏速度受多⽅⾯因素的影响,如⽹速,操作步骤的繁琐程度,页⾯加载的速度,以及我们在脚本中设置的等待时间,运⾏脚本的线程数等。所以不能单⽅⾯追求运⾏速度的,要确保稳定性,能稳定地实现回归测试才是最关键。1)我们可以从以下⼏个⽅⾯来提⾼速度:⼀、减少操作步骤,如经过三四步才能打开我们要测试的页⾯的话,我们就可以直接通过⽹址来打开,减少不必要的操作。⼆、中断页⾯加载,如果页⾯加载的内容过多,我们可以查看⼀下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页⾯加载。三、在设置等待时间的时候,可以⽤sleep固定时间,也可以检测某个元素出现后中断等待也可以提⾼速度。四、配置testNG实现多线程。在编写测试⽤例的时候,⼀定要实现松耦合,然后在服务器允许的情况下,尽量设置多线程运⾏,提⾼执⾏速度。5、⽤例在运⾏过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升⽤例的稳定性?答:( )、itly_wait(30),多⽤ try 捕捉,处理异常,此时我们要分析出不稳定的原因,然后有针对性的去解决问题。那么主要有以下⼏个⽅⾯ :⼀、⽹速问题:有的时候⽹页加载的⽐较慢,在程序执⾏的时候要操作的元素没有显⽰出来,这种情况⽐较常见,运⾏⼀次⽹速好的时候通过了,再运⾏⼀次,页⾯没有打开,就不通过了。为了提⾼稳定性,我们只能牺牲运⾏时间了,在经常检测失败的元素前加上等待时间,等要操作的元素出现之后再执⾏下⾯的操作。⼆、Selelnium的原因:Selenium1.0和2.0还是有区别的,有些函数在2.0下运⾏确实有时⽽有效,时⽽⽆效。如果是mouseover()函数,就是这种情况, 我们需要避免使⽤这类的函数。三、多线程的时候,测试⽤例间相互影响。虽然使⽤多线程的时候运⾏速度⽐较快,但是如果⽤例之间的耦合性没有设计好,也会影响的,如果⽤例A先于⽤例B执⾏的时候,就会影响到⽤例B;反之则没有问题。这种情况,如果你的⾃动化测试⼯程打算多线程的时候,提前就要把测试⽤例测试的耦合度放松,尽管没有任何关系,因为多线程的执⾏顺序是不受控制的。

6、你的⾃动化⽤例的执⾏策略是什么?答:⾃动化测试⽤例的执⾏策略是要看⾃动化测试的⽬的,通常有如下⼏种策略:⼀、⾃动化测试⽤例是⽤来监控的,在此⽬的下,我们就把⾃动化测试⽤例设置成定时执⾏的,如果每五分钟或是⼀个⼩时执⾏⼀次,那可以在jenkins上创建⼀个定时任务即可。⼆、必须回归的⽤例。有些测试⽤例,如BVT测试⽤例,我们在公司产品任何变动上线之前都需要回归执⾏。那我们就把测试⽤例设置成触发式执⾏,在jenkins上将我们的⾃动化测试任务绑定到开发的build任务上。当开发⼈员在仿真环境上部代码的时候,我们的⾃动化测试⽤例就会被触发执⾏。三、不需要经常执⾏的测试⽤例。像全量测试⽤例,我们没有必要⼀直回归执⾏,毕竟还是有时间消耗的,有些⾮主要业务线也不需要经常回归。这类测试⽤例我们就采⽤⼈⼯执⾏,在jenkins创建⼀个任务,需要执⾏的时候⼈⼯去构建即可。7、什么是持续集成?答:持续集成源于极限编程(XP),是⼀种软件实践,软件开发过程中集成步骤是⼀个漫长并且⽆法预测的过程。集成过程中可能会爆发⼤量的问题,因此集成过程需要尽可能⼩⽽多,实际上持续集成讲的是不断的去做软件的集成⼯作。持续集成,最简单的形式是包括⼀个监控版本控制(SVN等等)变化的⼯具。当变化被发觉时,这个⼯具可以⾃动的编译并测试你的应⽤。8、⾃动化测试的时候是不是需要连接数据库做数据校验?答:UI⾃动化不需要,接⼝测试会需要9、id,name,class,xpath, css selector这些属性,你最偏爱哪⼀种,为什么?答:css 、xpath ⼏乎所有的元素都可以定位到10、如何去定位页⾯上动态加载的元素?答:触发动态加载元素的事件,直⾄动态元素出现,进⾏定位11、如何去定位属性动态变化的元素?答:xpath或者css通过同级、⽗级、⼦级进⾏定位

12、点击链接以后,selenium是否会⾃动等待该页⾯加载完毕?答:会的等待该页⾯加载完的13、webdriver client的原理是什么?答:Webdriver实现原理:通过研究selenium-webdriver的源码,发现其实webdriver的实现原理并不⾼深莫测⽆法揣度。在这⾥以webdriverruby binding的firefox-webdriver实现为例,简单介绍⼀下webdriver的⼯作原理,当测试脚本启动firefox(⽕狐)的时候,selenium-webdriver 会⾸先在新线程中启动firefox浏览器。如果测试脚本指定了firefox的profile,那么就以该profile启动,否则的话就新启1个profile,并启动firefox; firefox⼀般是以no-remote的⽅法启动,启动后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,可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是remoteserver,它的职责就是等待client发送请求并做出相应;client端简单说来就是我们的测试代码,我们测试代码中的⼀些⾏为,⽐如打开浏览器,跳转到特定的url等操作是以http请求的⽅式发送给被测试浏览器,也就是remote server,remote server接受请求,并执⾏相应操作,并在response中返回执⾏状态、返回值等信息;14、webdriver的协议是什么?答:The WebDriver Wire Protocol

15、启动浏览器的时候⽤到的是哪个webdriver协议?答:http协议16、什么是page object设计模式?答:Page Objects是指UI界⾯上⽤于与⽤户进⾏交互的对象。它可以指整个页⾯,也可以指Page上的某个区域。Page Objects是你的testcode的交互对象,是对实际UI的⼀种抽象模型化。通过Page Objects可以减少重复代码的编写,例如,很多页⾯都有同样的header,footer,navigator等部分,如果对这些进⾏抽象,只写⼀次就可以在其他地⽅通⽤了。17、怎样去选择⼀个下拉框中的value=xx的option?答:需要⼆次定位

18、如何在定位元素后⾼亮元素(以调试为⽬的)?答:重置元素属性,给定位的元素加背景、边框

19、什么是断⾔?答:断⾔的英⽂是assertion,断⾔检查的英⽂是assertion checking。断⾔是指定⼀个程序必须已经存在的状态的⼀个逻辑表达式,或者⼀组程序变量在程序执⾏期间的某个点上必须满⾜的条件。20、如果你进⾏⾃动化测试⽅案的选型,你会选择哪种语⾔,java,js,python还是ruby?答:使⽤⾃⼰熟悉的语⾔

21、page object设置模式中,是否需要在page⾥定位的⽅法中加上断⾔?答:不需要22、page object设计模式中,如何实现页⾯的跳转?答:get、click (可能有坑)23、⾃动化测试⽤例从哪⾥来?答:⼿⼯⽤例中抽取出来,可以参考⾃动化⽤例的执⾏策略

24、你觉得⾃动化测试最⼤的缺陷是什么?答:不稳定、可靠性、不易维护、成本与收益不成正⽐25、什么是分层测试?答:UI测试、集成/接⼝测试、单元测试这些都可以算做分层测试26、webdriver可以⽤来做接⼝测试吗?答:有⼀定难度,不推荐做接⼝测试27、get和post 的区别?答:因为使⽤GET请求不会产⽣什么动作。不会产⽣动作意味着GET的HTTP请求不会在服务器上产⽣任何结果。但是安全⽅法并不是什么动作都不产⽣,这⾥的安全⽅法仅仅指不会修改信息。POST可能会修改服务器上的资源的请求。⽐如CSDN的博客,⽤户提交⼀篇⽂章或者⼀个读者提交评论是通过POST请求来实现的,因为再提交⽂章或者评论提交后资源(即某个页⾯)不同了,或者说资源被修改了。两种请求⽅式的区别:1、GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数⽤&连接。URL的编码格式采⽤的是ASCII编码,⽽不是uniclde,即是说所有的⾮ASCII字符都要编码之后再传输。POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上⾯的item=bandsaw就是实际的传输数据。因此,GET请求的数据会暴露在地址栏中,⽽POST请求则不会。2、传输数据的⼤⼩在HTTP规范中,没有对URL的长度和传输的数据⼤⼩进⾏限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使⽤GET请求时,传输数据会受到URL长度的限制。对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据⼤⼩进⾏限制,Apache、IIS都有各⾃的配置。3、安全性POST的安全性⽐GET的⾼

28、公司内⼀直在使⽤的测试系统(B/S架构)突然不能访问了,需要你进⾏排查并恢复,说出你的检查⽅法有哪些?答:⼀、⽹站输⼊域名直接⽆法访问,⽹站之前还正常,突然就⽆法访问1)测试FTP是否正常可以登录,不能登录的直接问域名商,是域名商的问题直接联系他们。2)空间赠送的三级域名是否能够访问⽹站打开⽹站(空间都赠送三级域名),如果也不能访问应该是空间问题。3)在电脑的开始菜单运⾏中输⼊cmd,在弹出的⿊框中输⼊:ping 你的域名;然后回车,如果看不到IP或IP地址与你的主机地址不符,则说明域名解析有误,是域名的问题得重新解析域名。⼆、访问报404错误(⽆法找到该页),说明是⽹站内容都正常是程序出现问题,看看程序是否完整。三、访问⽹站出现MySQL Server Error 这个是数据库链接错误,查看数据库连接⽂件和数据库是不是出现错误。四、访问⽹站出现500错误。1. 请登录FTP查看是否多了异常⽂件或丢失⽂件,说明⽹站被侵⼊了,马上联系⽹站制作商进⾏进⾏排查故障。2. 如果空间且FTP程序⽬录没有缺失⽂件或刚刚安装就出现500错误,请确认空间已开启scandir()函数,查看是不是禁⽌了这个函数。

在学习完Selenium的⼤部分接⼝或者⽅法之后,你可能会去⾯试⾃动化测试,主要是Selenium的⾃动化测试。下⾯这些问题总结,可能会对你有所帮助。1. 什么是Selenium?Selenium是⼀个开源的web⾃动化测试框架,主要是基于web uI的⾃动化测试。现在的版本,逐步增加了对移动端的⾃动化测试。Selenium⽀持多种语⾔进⾏开发⾃动化测试脚本,有Java,python,C#,Javascript等等。Selenium⽀持跨浏览器平台测试。um是否⽀持桌⾯应⽤软件的⾃动化测试。Selenium不⽀持桌⾯软件的⾃动化测试,Selenium是根据⽹页元素的属性才定位元素,⽽其他桌⾯软件⾃动化测试⼯具是根据桌⾯元素的位置来定位元素,当然现在也有根据桌⾯元素的属性来定位的。um是否⽀持⽤例的执⾏的引擎。引擎好⽐就是⼀个发动机。Selenium是没有关于测试⽤例和测试套件管理和执⾏的模块。我们需要借助第三⽅单元测试框架来实现⽤例管理和⽤例的执⾏。例如Java中有Junit或者testNG,Python中有unittest单元测试框架。um是否有读取excel⽂件的库没有,这⾥需要⽤到第三⽅⼯具。例如Apache POI插件。um有哪些组件?最早的有Selenium IDE,IDE只⽀持安装在fiefox上⼀个插件,⽀持录制⾃动化脚本。还有remote RC,和Grid 和webdriver。我们⼀般最重要的就是使⽤webdriver。um有什么限制或者缺陷 除了基于web的软件和mobile的程序,selenium不⽀持桌⾯软件⾃动化测试。软件测试报告,和⽤例管理只能依赖第三⽅插件,例如Junit/TestNG和unittest。由于它是免费的软件,所以没有供应商去提供⽀持和服务,有问题,只能求助selenium社区。还有⼀个就是,selenium⼊门门槛可能有点⾼,需要具备⼀定编程语⾔基础的才能玩转。7.在selenium中,有哪些不同定位元素⽅法ID/className/Name/LinkText/PartialLinkText/Xpath/CSS selector8.什么是imlicitlyWaitimlicitlyWait是隐式等待,⼀般在查找元素的时候使⽤。例如,我设置⼀个查找元素最⼤时间为10秒,使⽤了imlicitlyWait后,如果第⼀次没有找到元素,会在10秒之内不断循环去找元素,知道超过10秒,报超时错误。9.什么是expliciteWait这个是显式等待,就是不管如何都是要等10秒,如果你设置了10秒超时,这个是selenium2的功能在selenium3中,我暂时没有找到这个接⼝。10.什么是线程等待有时候,我们需要强制设置线程等待,(2000),driver这个实例,就是当前的线程。11.什么是pollingEvery这个是设置个⼀段时间就去做⼀件事,例如下⾯设置隔⼀秒就去查找元素⼀次。 WebDriverWait wait = new WebDriverWait(driver,30); gEvery(1, S); ement(("xxxx"));

发布者:admin,转转请注明出处:http://www.yc00.com/web/1687932239a58414.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信