前言 最近看到群里有小伙伴贴出一组面试题,最近又是跳槽黄金季节,小编忍不住抽出一点时间总结了下, 回答不妥的地方欢迎各位高手拍砖指点。 一、selenium中如何判断元素是否存在? 首先selenium里面是没有这个方法的,判断元素存在需要自己写一个方法了。 元素存在有几种形式,一种是页面有多个元素属性重复的,这种直接操作会报错的;还有一种是页面隐藏的元素操作也会报错 判断方法参考这篇:Selenium2+python自动化36-判断元素存在 二、selenium中hidden或者是display = none的元素是否可以定位到? 定位是可以定位到的,但是不能操作,可以判断元素is_displayed() (我一直不里面这个定位到底是几个意思,只要页面上有的元素,我觉得都能定位到, 实在不行,小编可以爬源码Selenium2+python自动化37-爬页面源码(page_source),能不能操作那是另外一回事) 三、selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的? 一种是隐式等待: driver.implicitly_wait() 另外一种是显式等待:WebDriverWait() 等待时间放长一点参考这篇:Selenium2+python自动化38-显示等待(WebDriverWait) 四、如何提高selenium脚本的执行速度? 1.少用sleep 2.多用显式等待方法 3.弄个性能好的电脑
1.查找元素前先做前置条件判断:expected_conditions()里面的各种方法(这个我的博客里面暂时没写。后续补上) 2.显式等待:WebDriverWait() 这两者配合使用 六、你的自动化用例的执行策略是什么? 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的工作原理。
这就是webdriver的工作流程,看起来很复杂实际上当了解了webdriver的实现原理后,理解上述问题应该比较简单。 webdriver是按照server – client的经典设计模式设计的。 server端就是remote server,可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client发送请求并做出相应; client端简单说来就是我们的测试代码,我们测试代码中的一些行为,比如打开浏览器,转跳到特定的url等操作是以http请求的方式发送给被 测试浏览器,也就是remote server;remote server接受请求,并执行相应操作,并在response中返回执行状态、返回值等信息; 十四、webdriver的协议是什么? 1.这个尴尬了,不懂 十五、启动浏览器的时候用到的是哪个webdriver协议? 1.http 十六、什么是page object设计模式? 1.通俗来讲,就是页面元素放到一个脚本,方便页面元素的维护 2.测试用例从这个页面元素脚本里面去调用 十七、什么是page factory设计模式? 1.通俗来讲,就是把八种元素定位合并为一种方法 (这个我也不知道怎么解释了。。。) 十八、怎样去选择一个下拉框中的value=xx的option? 1.select类里面提供的方法:select_by_value(“xxx”) 参考这篇:Selenium2+python自动化15-select下拉框 2.xpath的语法也可以定位到 十九、如何在定位元素后高亮元素(以调试为目的)? 1.js方法,直接让该元素置顶 参考这篇:Selenium2+python自动化17-JS处理滚动条 2.要是点击后没高亮,就用js去修改属性吧(万能的js) 参考这篇:Selenium2+python自动化25-js处理日历控件 二十、什么是断言? 1.assert,判断测试结果与期望结果是否一致 十二一、如果你进行自动化测试方案的选型,你会选择哪种语言,java,js,python还是ruby? 1.大python威武,js也要略懂 二十二、page object设置模式中,是否需要在page里定位的方法中加上断言? 1.不需要 二十三、page object设计模式中,如何实现页面的跳转? 1.click方法 二十四、自动化测试用例从哪里来? 1.自己写的 2.别人写的 (这问题有点脑残,反正不是天上掉下来的) 二十五、你觉得自动化测试最大的缺陷是什么? 1.需求变动大的时候,维护成本大 二十六、什么是分层测试? 1.数据层 2.接口层 3.UI层 自由发挥吧 二十七、webdriver可以用来做接口测试吗? 1.不可以 用大python就可以了妥妥的了 总结:从整个的面试题来看,难度还是挺大的,特别是脚本性能的优化这块,如果只是会简单的几个元素定位是完全无法着手优化的。 能提这些问题出来的面试官也是有一定实力的。 |
|