首页 > 其他分享 >2024软件测试面试题-自动化

2024软件测试面试题-自动化

时间:2024-06-18 10:27:51浏览次数:13  
标签:定位 面试题 元素 selenium 2024 测试 自动化 软件测试 页面

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去驱动浏览器作为远程服务器,执行脚本发送请求,然后服务器解析请求作出相应操作(如点击按钮、填写表单等),并返回给客户端(脚本),获取需要的数据,最后关闭浏览器。

10.如何去定位属性动态变化的元素?

属性动态变化是指该element没有固定的属性值,只能通过相对位置定位
第一种方法:用find elements()遍历
第二种方法:通过xpath的轴,需要一级一级的查找到目标元素

11.selenium调用js(execute_script),有哪些场景?

(1)操作DOM:进行页面元素的交互,例如点击、输入文本、获取元素属性等。
(2)滚动页面:操作滚动条,控制页面的滚动位置。
(3)获取页面数据:获取页面上不能直接通过 Selenium 获取的数据。
(4)修改页面行为:比如禁用点击事件,修改表单验证等。

12.selenium如何处理web弹窗?js弹窗?

Web页面弹窗最常见的有3种:alert类型,confirm类型,和prompt类型弹窗,这种我们无法通过定位元素来操作;
selenium提供switch_to_alert()方法定位到 alert/confirm/prompt对话框,使用 text/accept/dismiss/send_keys进行操作,比如:
driver.switch_to.alert.accept() # 确定、同意;

13.selenium为什么不推荐使用xpath定位?

selenium使用xpath定位时采用遍历页面的方式,性能指标较差。另外xpath定位有通过绝对路径定位的,有时会不准确;
而用css选择器定位比较简洁,运行速度更快,通常用于性能要求严格的场景。

14.如何判断一个页面上元素是否存在?

(1)使用异常处理try…except语句,找不到元素时捕获此异常
(2)使用find elements()遍历判断元素是否存在,定义一个方法,如果元素个数len()>0,则元素存在返回True,如果等于0则不存在返回False
(3)结合WebDriverWait until和excepted_conditions条件判断(强烈推荐)

15.一个元素明明定位了,点击无效(也没报错),如何解决?

(1)添加等待时间
(2)模拟鼠标或键盘操作
(3)使用js进行点击,不会收到元素遮罩的影响,只要能定位到元素,就能执行此操作
例:# js 点击
js = ‘document.getElementById(‘baidu’).click()’
driver.execute_script(js)

16.如何提高自动化测试脚本的稳定性?

(1)保证数据的正确性,脚本运行前构造新的数据,运行完成后进行数据清理
(2)优先使用显示等待的方式,sleep等待尽量少用(影响执行时间)
(3)用例与用例之间要可以独立执行,尽量避免产生依赖
(4)提升环境稳定性,包括自身环境和第三方系统环境的稳定性
(5)添加异常处理,脚本中尽量考虑可能出现的异常特殊情况,并对其有对应的处理方法,避免失败后程序的退出,比如异常捕获处理、失败重跑机制

17.selenium中隐藏元素定位,你该如何做?

隐藏元素可以正常定位到,只是不能操作(定位元素和操作元素是两码事,操作元素是指click 、clear 、send_keys等这些方法)。我们可以用js来操作隐藏元素,要显示一个元素,可以将style.display属性设置为之前的值或’block’、‘inline’、'inline-block’等,取决于元素的显示方式。
例:# 显示element元素
var element = document.getElementById(‘myElement’);
element.style.display = ‘block’;
注:js和selenium不同,只有页面上有的元素(在dom里面的)都能正常操作

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

不可以,selenium不能定位不可见的元素。display=none的元素实际上是不可见元素

19.selenium中如何保证操作元素的成功率?即如何保证我点击的元素一定是可以点击的?

(1)被点击的元素一定要占一定的空间,因为selenium默认会去点这个元素的中心点,不占空间的元素算不出来中心点
(2)被点击的元素不能被其他元素遮挡
(3)使用element.is_enabled()判断元素是否是可以被点击的,如果返回false证明元素可能灰化了,这时候就不能点

20.如何提高selenium脚本的执行速度?

(1)减少操作步骤,避免不必要的操作;
(2)中断页面加载,如果页面加载内容过多并且加载的内容不影响我们测试,可以设置超时时间,中断页面加载;
(3)设置等待时间的时候,可以sleep()固定的时间,检测到元素出现后中断等待也可以提高速度;
(4)配置testNG实现多线程,在编写测试用例的时候,一定要实现松耦合,在服务器允许的情况下尽量设置多线程运行,提高执行速度。

21.你的自动化用例的执行策略是什么?

日执行:比如每天晚上在主干执行一次
周期执行:每隔2小时在开发分支执行一次
动态执行:每次代码有提交就执行

22.自动化测试的时候是不是需要连接数据库做数据校验?

UI自动化不需要(很少需要);
接口测试会需要:若接口进行读数据库操作,不需要校验,若接口进行写数据库操作,是需要的,一般除了验证期望响应结果与实际响应结果外,还需额外验证数据库是否真的进行了相关操作。因为接口返回结果并不能真实反映数据是否被写入或删除,从数据库层面来进行数据校验可以更方便验证系统的数据处理方面是否正确。

23.webdriver的协议是什么?

client与driver之间的约定,无论client使用的是什么语言,只要通过这个约定,client就可以准确的告诉drier它要做什么以及怎么做。
webdriver协议本身是http协议,数据传输使用json。

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

手工用例转换而来:通过将手工测试用例的步骤、需要输入的命令和回显等信息转换为自动化测试脚本,可以有效地将手工测试转化为自动化测试,两者相结合保证自动化测试的明确性。
后台配置:在后台配置测试用例,包括获取点击位置的xpath、预期文案或样式等信息,然后通过请求接口将测试用例数据配置写入表,并提供接口拉取所有测试用例数据。这种方法通过配置化方式,使得测试用例的生成更加灵活和可管理。
自动生成:通过编写特定的脚本或程序,自动生成测试用例。这种方法可以避免在一条测试用例中执行完所有行为,避免因出错而中断代码执行的问题。通过遍历接口数据生成前缀为test_case_xxx的测试用例,可以有效地提高测试用例的生成效率。

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

(1)通常适用于重复性测试场景,而对于一些非重复性的测试场景,自动化测试可能无法准确地模拟用户行为
(2)依赖于测试脚本的编写和维护,需要大量的时间和资源,且要一定的代码能力才能及时维护,尤其是复杂的测试场景
(3)无法完全替代手动测试
(4)无法发现非预期的情况,应为自动化测试只能检查逾期的结果,而不能发现意外的错误

26.driver.close() 和driver.quit() 有什么区别

都可以实现退出浏览器的功能
driver.close()是关闭当前聚焦的tab页面
driver.quit()是关闭全部浏览器tab页面,并退出浏览器

27.如何查找元素是否显示在屏幕上?

WebDriver通过isDisplayed(), isSelected(), isEnabled(),这三种方法判断Web元素的可见性,这类方法将返回结果是布尔类型;Web元素可以是按钮,下拉框,复选框,单选按钮,标签等

28.如何去定位页面上动态加载的元素?

首先触发动态事件,然后再定位。如果是动态菜单,则需要层级定位

29.你是怎么开展自动化测试工作的?

(1)根据产品的业务特性整理出来,可以做自动化的一个功能模板;
(2)我们会根据有限级以及人员现状,来制定自动化测试计划;
(3)我们会从功能用例当中挑选合适的用例来转成自动化用例;
(4)框架选型,选择编制语言或者工具来实现,我们的团队都是会代码的能力还不错,所以我们选择的是Python 语言来实现的;
(5)自动化测试的脚本开发;
(6)根据项目来制定自动化的执行方案;
(7)测试报告的分析工作,以及自动化测试成果的汇报,跟进后期的维护

30.pytest和unittest的区别?

(1)unittest 是 pytest 官方库,兼容性更好更稳定,pytest 在安装的时候可能会出现和 Python 的版本出现兼容问题;
(2)在用例编写上面,unittest 当中,用例都是以类的形式编写的,并且都要继承于这个testcase;pytest当中,支持函数和类两种形式,并且 pytest 有conftest.py 这个文件来支持全局的共享前置后置;
(3)在用例收集上,unittest当中,要利用testloader和testsuite来主动收集和加载用例;pytest当中,能够自动识别用例;
(4)在用例分类和筛选上面,unittest当中,对现有的用例进行一个筛选和处理的话是比较麻烦的;pytest当中,可以通过打标记来轻松实现用例筛选;
(5)在运行失败的机制上面,unittest当中,官方库并没有提供失败重启的机制;pytest当中,自带的失败重运行机制;
(6)在运行过程上面,unittest当中,没有支持的插件;pytest当中,有700多个插件,可以支持的插件非常丰富

31.最熟悉的 selenium 操作?

基本上selenium 提供的一下几大类操作都能够灵活使用,比如说:八大元素定位方式、三大等待方式、用户点击、输入等常见操作、还有窗口切换、iframe 切换操作,比如说 actionchains、 文件上传、JS操作等一些复杂问题的操作;对于selenium 还没有提供现场封装方法的话会查阅W3C组织提供的 webdriver 标准自己进行捕捉

32.find_element() 和 find_elements() 有什么区别?

find_element() :返回找到的第一元素,如果找不到的话会直接报错;
find_elements() :会返回所有符合条件的元素,放到一个列表里面;如果找不到的话也不会报错,返回的是一个空列表

33.selenium 自动化如何进行文件上传?

如果是input元素的文件上传,可以通过 selenium 当中的 send_keys方式进行传递,但是这种方式局限性比较大,如果遇到像通过js调用的组件呢,会有一些问题;
这个时候就需要通过一些和系统交互的方式去完成上传操作,比如通过 autoit,pywinauto 或者是 pyautogui 这些第三方库进行操作。

34.你的项目是什么阶段介入接口自动化测试的?

首先,我这个项目是一个全新的项目,我负责接口测试,另外五个人负责功能测试;因为是新项目,所以我在项目开发阶段,我就开始介入接口自动化;
编写了自动化用例,我们使用yapi平台管理接口的,相当于是提供了接口文档,由于介入的时间比较早,在这个过程当中,自动化发现了几百个 bug;
为了后面的功能测试人员节约了很多时间,同时也能够保证,跟得上频繁上线的步伐

35.简述pageobject

一、原理
将页面元素和对元素的操作封装成一个page类,实现对页面对象和测试用例的分离。
一条测试用例可能需要多个步骤操作元素,将每个步骤单独的封装成一个方法,在执行测试用例的时候调用封装好的操作
二、好处
1.当某一个页面的元素发生变化,只需要修改该页面对象中的代码即可,不需要重复不断的修改测试用例
2.提高代码重用性,结构更加清晰,维护代码更容易
3.测试用例发生变化时,只需要修改少数页面对象即可

36.自动化测试发现BUG多吗?

不多,因为之前项目组是把已经测试通过的基本功能再进行自动化脚本编写和在后续版本执行自动化测试,它主要是保证已经测试通过的功能在新版本更新后没有问题

37.自动化测试有误报过bug吗?产生误报怎么办?

有误报过,有时候自动化测试报告中显示发现了bug,实际去通过手工测试确认又不存在该bug。
误报原因一般是:
1.元素定位不稳定,需要尽量提高脚本的稳定性
2.开发更新了页面但是测试没有及时更新维护

38.你会封装自动化测试框架吗

当然可以,自动化框架主要的核心框架就是分层+po模式,分别为:base基础封装层,pageobject页面对象,testcase测试用例层,unittest+ddt数据驱动模块,然后再加上日志处理模块,测试报告等

39.如何把自动化测试在公司中实施推广起来的?

(1)项目组调研选择自动化工具
(2)搭建自动化测试框架,在项目中逐步开展自动化
(3)把该项目的自动化流程,框架固化成文档
(4)推广到其他测试组进行应用

40.你觉得自动化测试的价值在哪里?为什么要做自动化测试

引用自动化测试之后,能代替大量繁琐的回归测试工作,把业务人员解放出来把精力集中在新功能或复杂的业务功能模块上,自动化测试一般是对稳定下来的功能进行自动化,保证不会因为产品的更新迭代导致之前稳定的功能出现bug

41.在selenium中如何处理多窗口?

多窗口之间的跳转,就是当你点击一个链接,这个链接会在一个新的tab页打开,然后你接下来要在新打开的tab页面查找元素
(1)我们在点击链接前使用driver.current_window_handle获得当前窗口的句柄
(2)再点击链接,点击后通过driver.window_handles获取所有窗口的句柄
(3)然后再循环找到新窗口的句柄,通过driver.switch_window()方法跳转到新的窗口

42.Selenium如何处理下拉菜单?

在selenium中有一个select的类,这个类支持对下拉菜单进行操作,使用方法如下:
(1)定位元素
(2)把定位的元素转化为select对象 sel=select(定位的元素对象)
(3)通过下标或者值或者文本选择下拉框
Sel.select_by_index(index)
Sel.select_by_value(value)
Sel.select_by_visble_text(text)
例:选择地区的下拉框
sheng=chrome.find_element(By.ID,‘add-new-area-select’)#将省这个下拉框进行实例化
Select(sheng).select_by_visible_text(‘北京市’)#将实例化的下拉框进行类型强制转换成select型,再使用下拉框的属性进行选择

43.日历控件填入日期如何处理

若日历控件有一个属性readonly,这个日历控件输入就具有只读的特性,可以先删除readonly属性,用直接输入日期的方式完成日期的输入;
但是selenium不具有删除一个元素属性的功能,所有要使用js来删除
例:
#编写一段js删除属性的语句,并进行实例化
script=’document.getElementById(‘date’).removeAttribute(‘readonly’)’
#通过浏览器执行这段命令,完成删除只读属性的操作
chrome.execute_script(script)

44.举例一下说明一下你遇到过的哪些异常

常见的异常有这些:
NoSuchElementException 没有该元素异常
ElementNotVisibleException 元素不可见异常
NoSuchAttributeException 没有这样属性异常
NoSuchFrameException 没有该frame异常
Timeoutexception 超时异常

45.如何实现截图,如何实现用例执行失败才截图

Selenium中提供了一个get_screenshot_as_file()的方法来截图的,一般结合try/except捕获异常时使用,进行错误截图

标签:定位,面试题,元素,selenium,2024,测试,自动化,软件测试,页面
From: https://blog.csdn.net/qq_41780453/article/details/139765503

相关文章

  • 2024年项目管理软件有哪些?推荐这16款好用的项目管理工具
    对于任何优秀的项目团队而言,一款好用的项目管理工具是跟踪、管理项目流程的必备神器。如今对于企业项目团队而言,网上有无数的项目管理工具解决方案可供使用,因此找出最适合自己团队的项目管理工具非常困难。项目经理想要更好地规划、管理和控制项目,但需要找到最合适的工具。好用的......
  • 攀登不止,华为数据库论文入选SIGMOD 2024,技术创新再谱新篇
    本文分享自华为云社区《攀登不止,华为数据库论文入选SIGMOD2024,技术创新再谱新篇》,作者:GaussDB数据库。6月9日-14日,2024年数据管理国际会议SIGMOD(ACMSIGMOD/PODSInternationalConferenceonManagementofData)在智利首都圣地亚哥召开。SIGMOD与ICDE、VLDB并称数据库领域三大......
  • 2024.6.17鲜花/错误的号码
    XY星的星际新闻报一直不太畅销,所以报纸上会有一些广告,毕竟星际新闻局的非机器人员工也得吃饭。有一则广告是这样的:【数据删除】研学基地位于【数据删除】,该研学基地致力于让学生体验一个幻想纪前的生活并培养学生不借助现代高科技的群居生活能力。该研学基地将于幻想历元年六......
  • 【工作】2024年,计算机相关专业还值得选择吗?
    2024年,计算机相关专业还值得选择吗?随着2024年高考落幕,数百万高三学生又将面临人生中的重要抉择:选择大学专业。在这个关键节点,计算机相关专业是否仍是“万金油”的选择?在过去很长一段时间里,计算机科学与技术、人工智能、网络安全、软件工程等专业一直以来是炙手可热的存在,吸引......
  • 2024/6/9
    今天写数据库的实验五,使用Java写了一个十分简易的数据库,连输入都没有,只是证明我用Java连上了sqlserver,代码如下:importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;p......
  • 2024-06-17-Spring 源码阅读(三)Bean 的生命周期
    由于Spring源码非常多,博客中贴源码会占用大量篇幅,阅读困难。详细分析部分会以commit提交形式关联源码提交,画图例来说明源码整体逻辑。Bean生命周期主体逻辑相关代码:Bean的基本创建流程、lazyInit、循环依赖Bean对象创建基本流程通过最开始的关键时机点分析,我们知道Bean......
  • 2024/5/28
    今天开发安卓端的科技政策一点通,相比于web端有点复杂,边查资料边敲代码一直弄到十一点。部分代码packagecom.example.policy;importandroid.content.Intent;importandroid.os.Bundle;importandroid.text.Editable;importandroid.text.TextWatcher;importandroid.view......
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
    朋友们,阿星又来啦!今天,我要给你们带来一些低调但超级实用的APP推荐,让你们追书看漫画,从此不再书荒!追书大全:这个APP,简直是书迷的救星!不用花一分钱,就能畅游在数百万本小说的海洋里,轻松找到你的最爱。追书大全不仅支持漫画和小说,还能让你在阅读的时候远离广告和弹窗的干扰,让你完......
  • 软件测试及其使用工具简介
    软件测试:使用技术手段验证软件是否满足使用需求;1.功能测试2.接口测试:api接口测试3.性能测试:模拟多人使用软件,查找服务器缺陷。测试的分类:1.按测试阶段划分:单元测试(针对源代码进行测试,实际过程中一般为开发操作),系统测试(对整个系统进行测试包括功能,兼容,文档等测试),集成测试(又称......
  • 【实用软件】Adobe Acrobat DC 2024最新版安装教程
    下载链接:https://r0vr8xquwul.feishu.cn/docx/PhBBdjSKZoeyFkxhO8Ucv7pEnph详细图文教程:https://www.yuque.com/zhefengerhuanzaigua/bld6x5/synrguy8okom8t97软件介绍AdobeAcrobat是由Adobe公司开发的一款PDF(PortableDocumentFormat,便携式文档格式)编辑软件。借助它,您可......