1.Selenium 常用的元素定位方式是什么?
Selenium八大定位方式:
id nane classname tag_name link_text partial_link_text xpath css
我们经常用的有id name classname xpath等;
我们选择定位方式的原则就是哪种简单你能够准确定位就选择哪一种,xpath这种定位方式比较准确,用的也比较多,尤其是一些元素没有id、name属性的时候,但也不全用,应为这种方式路径比较深,执行效率会低一些。
2.显示等待、隐式等待和强制等待有什么区别?
sleep():强制等待,设置固定休眠时间。执行sleep()后线程休眠,而另外两种线程不休眠。一般不推荐
implicitly_wait():隐式等待,即全局等待。是针对页面中的所有元素设置加载时间,如果超出了设置的时间则抛出异常。隐式等待可以理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到相关元素或者时间结束。
WebDriverWait():显示等待,是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在;如果在规定的时间内找到了元素,则直接执行,检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException
3. Selenium 中如何保证操作元素的成功率?
(1)不同方式进行定位循环尝试,如果第一种失败可以自动尝试第二种
(2)使用等待时,尽量使用显示等待,少用sleep(),尽量不用隐式等待
(3)尽量减少不必要的操作:可以直接访问页面的,不要通过点击操作访问
4.怎么对含有验证码的功能进行自动化测试?
(1)测试环境可以去除验证码,绕过直接登录
(2)设置万能码
(3)图形验证码,使用图片识别技术去读取验证码,但是目前任何一种验证码识别技术,识别率都不是100%
5.设计一个好的自动化框架,要考虑哪些因素呢?
(1)框架类型:分析测试需求和场景,根据设计的目标确定选择哪种类型的框架。
(2)易维护性:需要易于维护,代码规范、模块清晰、日志完整、代码注释清晰等,使得在需求变更或软件更新时,能够最小化对测试脚本的修改,框架出问题时能容易定位并修改。
(3)可扩展性:需要有良好的可扩展性,以便于在未来添加新的测试用例,或对功能进行升级。
(4)低耦合:各个模块各个类之间耦合度不要太高,便于后期维护。
(5)可移植性:架构开发语言需要使用可跨平台的语言,方便部署。
(6)结果报告:需要能生成详细且易于理解的测试结果报告,直观看出整个项目的生命周期运行得平稳与否,软件的质量如何。
6.自动化测试中为什么有误报bug?
(1)元素定位不稳定,需要尽量提高脚本的稳定性
(2)页面有改动,自动化脚本没有实时更新维护
7.元素定位不到的原因?
(1)定位方式有问题
(2)没有添加等待时间,在页面元素没加载出来的时候去定位了
(3)元素可能在iframe里,要先进入才能定位到元素
(4)页面句柄切换问题,导致页面错误无法定位
(5)元素为动态元素,需要通过父节点或子节点定位
8.关键字驱动和数据驱动的区别
关键字驱动是把项目中的一些逻辑封装成关键字(一个函数名),通过调用不同的关键字组合实现不同的业务逻辑,从而驱动测试用例的执行;
数据驱动是把测试用例里面的数据提取出来,放到excel或yaml文件中,然后通过改变文件中的数据来驱动测试用例;
总的来说,关键字驱动更侧重于将测试逻辑模块化,而数据驱动更侧重于测试数据的管理和灵活性。
9.selenium的工作原理
首先脚本启动driver,driver去驱动浏览器作为远程服务器,执行脚本发送请求,然后服务器解析请求作出相应操作(如点击按钮、填写表单等),并返回给客户端(脚本),获取需要的数据,最后关闭浏览器。