python selenium自动化测试面试题_selenium 自动化测试面试题及答案

1、selenium中如何判断元素是否存在?

- isElementPresent

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

- 不能

3、selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?

- 添加元素智能等待时间 driver.implicitly_wait(30)

- try 方式进行 id,name,clas,x path, css selector 不同方式进行定位,如果第一种失败可以自动尝试第二种

-Selenium保证元素成功率是通过元素的定位,当然它的定位方法很多,一定能有合适的。但是在自动化工程的实施过程中,高质量的自动化测试不是只有测试人员保证的。需要开发人员规范开发习惯,如给页面元素加上唯一的name,id等,这样就能大大地提高元素定位的准确性。当然如果开发人员开发不规范,我们在定位元素的时候尽量使用相对地址定位,这样能减少元素定位受页面变化的影响。只要我们元素定位准确,就能保证我的每一个操作符合我的预期

4、如何提高selenium脚本的执行速度?

- Selenium脚本的执行速度受多方面因素的影响,如网速,操作步骤的繁琐程度,页面加载的速度,以及我们在脚本中设置的等待时间,运行脚本的线程数等。所以不能单方面追求运行速度的,要确保稳定性,能稳定地实现回归测试才是关键。

我们可以从以下几个方面来提高速度:

一,减少操作步骤,如经过三四步才能打开我们要测试的页面的话,我们就可以直接通过网址来打开,减少不必要的操作。

二,中断页面加载,如果页面加载的内容过多,我们可以查看一下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页面加载。

三,在设置等待时间的时候,可以sleep固定的时间,也可以检测某个元素出现后中断等待也可以提高速度。

四,配置testNG实现多线程。在编写测试用例的时候,一定要实现松耦合,然后在服务器允许的情况下,尽量设置多线程运行,提高执行速度。

5、用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?

- time.sleep( )

- driver.implicitly_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实现原理](http://www.cnblogs.com/timsheng/archive/2012/06/12/2546957.html)

通过研究selenium-webdriver的源码,笔者发现其实webdriver的实现原理并不高深莫测无法揣度。在这里以webdriver ruby 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,可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client发送请求并做出相应;

client端简单说来就是我们的测试代码,我们测试代码中的一些行为,比如打开浏览器,转跳到特定的url等操作是以http请求的方式发送给被 测试浏览器,也就是remote server;remote server接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息;

14、webdriver的协议是什么?

-The WebDriver Wire Protocol

15、启动浏览器的时候用到的是哪个webdriver协议?

-http

16、什么是page object设计模式?

-http://www.cnblogs.com/tsbc/p/4080301.html

相似功能地方,代码基本都是一样的,界面元素换个查找方式,把原来的使用 xpath方式,改为使用 id 查找,需要对每个用例脚本都要改,虽然几个用例看不出什么工作量,但是重复findElement的代码,已经让我们感到了代码的笨重。如果某些定位发生了改变,我们就得贯穿整个测试代码进行调整元素定位,这样就会导致我们的脚本在后期,难以维护。因此通过Page Object Model 我们可以创建更加健壮代码,并减少或者消除重复的测试代码,从而也能够提高代码的可读性,减少编写脚本的工作量。Page Object Model的实现,就是通过分离测试对象和测试脚本的抽象来实现的。

17、什么是page factory设计模式?

- http://relevantcodes.com/pageobjects-and-pagefactory-design-patterns-in-selenium/

18、怎样去选择一个下拉框中的value=xx的option?

-二次定位

19、如何在定位元素后高亮元素(以调试为目的)?

-重置元素属性,给定位的元素加背景、边框

20、什么是断言?

-断言的英文是assertion,断言检查的英文是assertion checking。

-断言是指定一个程序必须已经存在的状态的一个逻辑表达式,或者一组程序变量在程序执行期间的某个点上必须满足的条件。

21、如果你进行自动化测试方案的选型,你会选择哪种语言,java,js,python还是ruby?

-使用自己熟悉的语言

22、page object设置模式中,是否需要在page里定位的方法中加上断言?

-不需要

23、page object设计模式中,如何实现页面的跳转?

-get、click (可能有坑)

24、自动化测试用例从哪里来?

-手工用例中抽取

-可以参考自动化用例的执行策略

25、你觉得自动化测试最大的缺陷是什么?

-不稳定

-可靠性

-不易维护

-成本与收益

26、什么是分层测试?

-[分层自动化](http://www.cnblogs.com/fnng/p/3653793.html?utm_source=tuicool&utm_medium=referral)

还是自己理解吧

27、webdriver可以用来做接口测试吗?

-有难度,不推荐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跟我师兄聊天引发的思考

我一个师兄,上大学的时候关系很好,我师兄也很喜欢打篮球,也许这就是我们有很多共同话题的原因,人是很奇怪,特别是做技术的,本来就比较闷,很难跟陌生人马上来电,但是如果有个共同爱好…

HDU 4701 Game

link:http://acm.hdu.edu.cn/showproblem.php?pid4701 DP真美 ! (亝 ‿ 亝) dp[pos][a][b][0/1]:第pos件商品即将被购买,Alice有a元, Bob有b元,轮到谁行动(0:Alice 1:Bob)。 打训练赛时,设计出…

写好一份属于自己的简历

原文出处:原文链接 下面是精益技术简历的47条原则: 版式 原则1:使用对齐 原则2:不必使用居中 原则3:谨慎使用粗体 原则4:避免不必要的折行 原则5:使用制表符辅助对齐 个人信息 原则6&#xff…

别忘了当初你为何出发

最近,特别喜欢听一个广播,宝安905,估计是因为我最近营养不太够,需要多喝一些鸡汤,刚好这个电台广播的鸡汤非常够味,非常符合我现在的胃口。比如这一句「你想收获世界上最好的东西,先让世界看到最…

Git学习历程

Git学习历程 作为一名有理想的程序员,当然要会用一些高效的工具。今天来复习一下之前学过的Git的使用方法。 学习流程: 1、入门GitHub的文章:http://pan.baidu.com/s/1jHLdNZg(百度云盘)。这篇文章中把GitHub讲的很详细,但是在讲解…

kass中lisp文件_自动加载文件目录下的lsp、vlx和fas文件

;自动加载文件夹中的lsp,fas,vlx文件(defun loadlspfile(Folder_path / nn f1)(if Folder_path(vl-catch-all-apply(lambda ( / nn f1)(setq nn(append(xingle_GetFile Folder_path "*.lsp")(xingle_GetFile Folder_path "*.fas")(xingle_GetFile Folder_p…

写给自己的话

花一定的时间, 在某感兴趣的几个框架, 或者技术上达到一定深度, 不要浅尝辄止, 多去研究, 扩展, 理解为什么要这样做, 我应该要怎么做, 我为什么要这样做某一方向不具有深度的根本原因在于: 1. 回避问题: 总是寻求别人做好的解决方案, 这样做未尝不可, 但是也应该搞懂为什么别人…

一位跟我一样疑惑的同学~

今天遇到一个同学给我提的问题,非常像我之前的经历,想分享给大家,最近手机码字,觉得有用,给个在看或者转发,小弟感激不尽,在所不辞。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~我2012年毕业&#xff…

亚信第一天 5-15

webpack 入门教程 http://www.jianshu.com/p/4df92c335617 整体目录结构 lib - 使用nodejs laydate git .bat 安装脚本 打包 .sh page.json 整体配置 server.js 开发服务器配置 webpack-模块化划分及代码组织 使用npm自动化管理 npm的使用 - node的包管理工具 www.npmjs.com pa…

哦,瞧那,无能的悲观主义者---无能者的独唱

摘自网易云评论区 C语言中,反斜杠无法直接输出,需要在前面再加一个反斜杠标识出来才可以。如果,你是一个注定要被输出的反斜杠,那么我愿意成为那个在你之前的隐姓埋名的反斜杠。 “我所有的自负皆来自我的自卑,所有的…

长亭php反序列化防护_CTF-攻防世界-Web_php_unserialize(PHP反序列化)

题目解题过程PHP反序列化的一道题,从代码看出flage在fl4g.php这个文件里面,Demo类的构造方法可以传入文件名。把Demo的代码贴到本地做一下序列化classDemo {private $file index.php;public function __construct($file) {$this->file $file;}funct…

在深圳转户口这件小事

我对于政策这种事情是比较感冒的,比如老师说不能去外面上网,我是绝不会偷偷跑出去的,来深圳的第一年,我就想着办理户口了,第一次机会是在 TCL 的时候,人事部门有专门给我们办理转深户的,不过那时…

高程(三)笔记---- 第三章

一、有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat() Number():可以用于任何数据类型,用法-----------Number(true) parseInt():把字符串转换为整型数值,用法---------parseInt("123") parseFloat():把字符串…

CPU 和 GPU

端午回来,发的第一篇文章,还在谋划其他事情,大家共勉。现在电脑这么普及,应该每个人都知道 CPU ,即使不懂电脑的人都能憋出大招告诉你电脑里面有一个 CPU,CPU 是中央处理器,是很多很多年积累下来…

mysqlierror php_php操作mysqli(示例代码)

php操作mysqli(示例代码)更新时间:2013年10月28日 08:56:20 作者:php操作mysqli的示例代码。需要的朋友可以过来参考下,希望对大家有所帮助define("MYSQL_OPEN_LOGS",true);class mysqliHelp{private $db;public function __cons…

React Native - 3 View, Text简介以及onPress onLongPress事件

我们要生成如下的构图 直接上图,不解释。如下图所示,定义函数,函数之间不需要逗号,在元素上添加事件,使用关键字this.{function name}转载于:https://www.cnblogs.com/yahb/p/6864382.html

创业日记

最近在拼命的写代码,估计这段时间写代码的行数等于过去一年的了,这是保守估计,如果不保守估计就不好说了,我本来想在原来的小组群里发话说,打算是下面这段对话我:X总,你站起来X总:为…

线程基础知识_线程生命周期_从JVM内存结构看多线程下的共享资源

线程生命周期 线程状态 New: 线程创建(new Thread()) Runnable: 线程可运行(thread.start()), 注: 调用start并不一定是运行状态, 可能在等待CPU调度 Running: 线程进入运行状态 Blocked: 阻塞状态(object.wait, Thread.sleep) Terminal: 死亡状态(线程正常/非正常结束运行)th…

centos查看网络速率_CentOS 7查看网络带宽使用情况

最近装Openshift,需要下载大量的镜像,想看看他们的带宽使用情况。nload这确实是非常好用的工具,我也是刚刚知道。直接yum install就可以。使用也很简单,直接启动就可以,当然你也是可以加入参数,指定网卡。默…

CPU,内核,寄存器,缓存,RAM,ROM的知识

偷偷说一下,这个图片是晚上 8 点钟的太阳,一个骚男华为总工发给我的,有时间还是想出去走走很多人使用计算机,但是对计算机却不是很懂,即使是作为非常资深的码农,也不能做到心中有剑的地步,那么怎…