前言
最近看到群里有小伙伴贴出一组面试题,最近又是跳槽黄金季节,小编忍不住抽出一点时间总结了下
 
一、selenium中如何判断元素是否存在?
expected_conditions模块提供了16种判断方法,以下方法是判断元素存在DOM中:
presence_of_element_located
    """ An expectation for checking that an element is present on the DOM of a page. This does not necessarily mean that the element is visible.
        判断元素存在DOM中,存在并不代表可见(也就是说可以是隐藏的,存在并不代表可以被点击)

"""
 
二、selenium中hidden或者是display = none的元素是否可以定位到?
定位是可以定位到的,但是不能操作,可以判断元素is_displayed()
想点击的话,可以用js去掉dispalay=none的属性
 
三、selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?
WebDriverWait()与expected_conditions判断方法封装,循环判断页面元素出现后再操作,这样可以大大提高操作元素的成功率。

四、如何提高selenium脚本的执行速度?
1.少用sleep,尽量不用implicitly_wait
2.多用显式等待方法
3.弄个性能好的电脑
五、用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?
跟第三问一样,封装显示等待与判断方法
 
六、你的自动化用例的执行策略是什么?
1.集成到jenkins一键执行,可以手动执行,也可以定时执行

七、什么是持续集成?
1.持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。
每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
八、自动化测试的时候是不是需要连接数据库做数据校验?
1 UI自动化不需要
2 接口测试会需要
 
九、id,name,class,xpath, css selector这些属性,你最偏爱哪一种,为什么?
1.css妥妥的,css语法简洁,定位快(xpath语法长,定位慢,还不稳定)

十、如何去定位页面上动态加载的元素?
1. WebDriverWait()方法循环去查询是否元素加载出来了
 
十一、如何去定位属性动态变化的元素?
1.先去找该元素不变的属性,要是都变,那就找不变的父元素,用层级定位(以不变应万变)
 
十二、点击链接以后,selenium是否会自动等待该页面加载完毕?
1.这个不会等的,没加载完也可以下一步操作
 
 
十三、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中返回执行状态、返回值等信息;
 
十四、webdriver的协议是什么?
 
十五、启动浏览器的时候用到的是哪个webdriver协议?
 
十六、什么是page object设计模式?

1.通俗来讲,把每个页面当成一个页面对象,页面层写定位元素方法和页面操作方法
2.用例层从页面层调用操作方法,写成用例
3.可以做到定位元素与脚本的分离
 
 
十七、什么是page factory设计模式?
创建一个BasePage类创建多个Page类,继承BasePage用例层调用Page类

十八、怎样去选择一个下拉框中的value=xx的option?
1.select类里面提供的方法:select_by_value(“xxx”)
2.xpath的语法也可以定位到
 
 
十九、如何在定位元素后高亮元素(以调试为目的)?
1.js方法,直接让该元素置顶
2.要是点击后没高亮,就用js去修改属性吧(万能的js)
 
二十、什么是断言?
1.assert,判断测试结果与期望结果是否一致

二十一、如果你进行自动化测试方案的选型,你会选择哪种语言,java,js,python还是ruby?
1.大python威武,js也要略懂
 
二十二、page object设置模式中,是否需要在page里定位的方法中加上断言?
1.不需要,page页只做元素抓取和操作方法
 
 
二十三、page object设计模式中,如何实现页面的跳转?
1.初始化driver参数,Page类传driver参数

二十四、自动化测试用例从哪里来?
1.自己写的
2.别人写的
(这问题有点脑残,反正不是天上掉下来的)
 
 
二十五、你觉得自动化测试最大的缺陷是什么?
1.需求变动大的时候,维护成本大
 
二十六、什么是分层测试?

1.数据层
2.接口层
3.UI层
自由发挥吧
 
二十七、webdriver可以用来做接口测试吗?
1.不可以,webdriver是专门做web的UI自动化参数
 
总结:从整个的面试题来看,难度还是挺大的,特别是脚本性能的优化这块,如果只是会简单的几个元素定位是完全无法着手优化的。
能提这些问题出来的面试官也是有一定实力的。

python+selenium自动化软件测试(第13章):selenium面试题的更多相关文章

  1. python+selenium自动化软件测试(第10章):测试驱动TDD

    测试驱动开发模式,要求开发在写业务代码的时候,先写出测试代码,同时单元测试例子决定了如何来写产品的代码,并且不断的成功的执行编写的所有的单元测试例子,不断的完善单元测试例子进而完善产品代码, 这样随着 ...

  2. python+selenium自动化软件测试(第9章) :Logging模块

    9.1 Logging模块 什么是日志记录?记录是跟踪运行时发生的事件的一种手段.该软件的开发人员将记录调用添加到其代码中,以指示某些事件已发生.事件由描述性消息描述,该消息可以可选地包含可变数据(即 ...

  3. python+selenium自动化软件测试(第8章) :多线程

    前戏:线程的基础 运行多个线程同时运行几个不同的程序类似,但具有以下优点:进程内共享多线程与主线程相同的数据空间,如果他们是独立的进程,可以共享信息或互相沟通更容易.线程有时称为轻量级进程,他们并不需 ...

  4. python+selenium自动化软件测试(第11章):持续集成jenkins和GitHub的使用

    11.1 jenkins持续集成环境 相关安装包下载链接:http://pan.baidu.com/s/1qYhmlg4 密码:dcw2赠送jenkins集成selenium环境视频链接http:// ...

  5. python+selenium自动化软件测试(第16章):基础实战(3)

    #coding:utf-8 from time import sleep from selenium import webdriver class cloudedge_register(object) ...

  6. python+selenium自动化软件测试(第15章):基础实战(2)

    #coding:utf-8 #for windows/py2.7 from time import sleep from selenium import webdriver browser = web ...

  7. python+selenium自动化软件测试(第14章):基础实战(1)

    #coding=utf- from selenium import webdriven from selenium.webdriver.common.by import By from seleniu ...

  8. python+selenium自动化软件测试(第7章):Page Object模式

    什么是Page ObjectModel模式Page Objects是selenium的一种测试设计模式,主要将每个页面看作是一个class.class的内容主要包括属性和方法,属性不难理解,就是这个页 ...

  9. python+selenium自动化软件测试(第6章):selenium phantomjs页面解析使用

    我们都知道Selenium是一个Web的自动化测试工具,可以在多平台下操作多种浏览器进行各种动作,比如运行浏览器,访问页面,点击按钮,提交表单,浏览器窗口调整,鼠标右键和拖放动作,下拉框和对话框处理等 ...

随机推荐

  1. RxSwift 系列(一) -- Observables

    为什么使用RxSwift? 我们编写的代码绝大多数都涉及对外部事件的响应.当用户点击操作时,我们需要编写一个@IBAction事件来响应.我们需要观察通知,以检测键盘何时改变位置.当网络请求响应数据时 ...

  2. vue2中component父子组件传递数据props的使用

    子组件使用父亲传过来的数据,我们需要通过子组件的 props 选项. 组件实例的作用域是孤立的,不能在子组件的模板内直接引用父组件的数据.修改父亲传过来的props数据的时候 父亲必须传递对象,否则不 ...

  3. HDOJ2012-素数判定

    Problem Description 对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数.   I ...

  4. MySQL系列(四)---引擎

    MySql中的引擎 目录 MySQL系列(一):基础知识大总结 MySQL系列(二):MySQL事务 MySQL系列(三):索引 引擎种类 FEDERATED MRG_MYISAM MyISAM BL ...

  5. VMware的安装和使用

    注:内容系兄弟连Linux教程(百度传课:史上最牛的Linux视频教程)的学习笔记. VMware的安装和使用 1. 虚拟机的安装 这里安装虚拟机VMware10,下载安装程序,双击安装-->为 ...

  6. Monotonicity 2[POI2010]

    题目描述 给出N个正整数a[1..N],再给出K个关系符号(>.<或=)s[1..k].选出一个长度为L的子序列(不要求连续),要求这个子序列的第i项和第i+1项的的大小关系为s[(i-1 ...

  7. 纯JS实现像素逐渐显示

    就是对于新手的我,以前从来没有做过对像素进行操作的实例.于是把资料书找了出来,实现了这个功能,比较简单,大神勿喷.下面是效果图,因为重在思路,效果就简陋一些. 其实就是简单的用JS实现将左上角的矩形随 ...

  8. CronJobs

    一.概念     CronJobs提供了在特定的时间或者间隔内处理业务逻辑的方法.一般创建一个Cronjob有两种方式,第一种是定义Java类,由Hybris生成脚本并加入数据库.第二种是直接编写gr ...

  9. vcruntime140.dll丢失解决

    之前安装好apache2.4后,打开突然报这样的错误,所以百度一下,发现了问题所在,原因是系统需要安装一个插件,才能正常运行apache2.4 Microsoft Visual C++ 2005 Re ...

  10. Linux下SVN配置

    1.安装svnyum install subversion 2.创建版本库fengyu(版本库的名字取来和你web项目的名字相同,否则你在服务器检出后会变成web项目里还有一层版本库的目录,里面才是项 ...