自动化测试面试题(含答案)
1.如何把自动化测试在公司中实施并推广起来的?
- 选择长期的有稳定模块的项目
- 项目组调研选择自动化工具并开会演示demo案例,我们主要是演示selenium和robot framework两种。
- 搭建自动化测试框架,在项目中逐步开展自动化。
- 把该项目的自动化流程、框架固化成文档
- 推广到公司的其它项目组应用
2.自动化测试用例如何编写?
- 自动化测试主要用于回归测试,因此自动化用例来源于我们编写的功能用例,不管是接口的还是业务测试的用例。所以我们会从原有用例中进行筛选,筛选出需要实现自动化测试的,但是这个实现过程并不是按部就班,需要根据原有用例进行自动化用例设计,比如修改昵称这样的功能,自动化用例中需要实现每次修改都和上一次不一样,否则无法验证修改是否正确。增加了这样的设计之后再按照使用脚本来实现自动操作的过程,并实现结果判断,也就是断言。
3.在上一家公司做自动化测试用的什么框架?
可以说出以下自己擅长的一种:
1.pytest+requests+allure
2.python+selenium+pytest+allure
3.robotframework+Selenium2Library
4.python+selenium+unittest
4、请描述一下自动化测试流程?
1.编写自动化测试计划
2.设计自动化测试用例
3.编写自动化测试框架和脚本
4.调试并维护脚本
5.无人值守测试
6.后期脚本维护(添加用例、开发更新版本)
5.自动化测试过程中,你遇到了哪些问题,是如何解决的
1.频繁地变更页面,经常要修改页面对象类里面的代码
2.自动化测试偶尔出现过误报
3.自动化测试结果出现覆盖的情况:Jenkins根据时间建立文件夹
4.自动化测试代码维护比较麻烦
5.自动化测试进行数据库对比数据
6.在selenium自动化测试中,你一般完成什么类型的测试?自动化覆盖率?
- 主要是冒烟测试和回归测试。回归测试主要写一些功能稳定的场景,通过自动化手段去实现,节约测试时间。
- 因为自动化测试用例也是在不断的更新和迭代,没有刻意去统计,大概在30%-40%左右
7.如果一个元素无法定位,你一般会考虑哪些方面的原因?
1.页面加载元素过慢,添加等待时间
2.页面有frame框架页,需要先跳转入frame框架再定位
- driver.switch_to.frame()
3.可能该元素是动态元素,定位方式要优化,可以使用部分元素定位或通过父节点或兄弟节点定位。
4.可能识别了元素,但是不能操作,比如元素不可用,不可写等。需要使用js先把前置的操作完成。
8.元素定位方法你熟悉的有哪些?
- ID,Name,Class_name,Tag_name.Link_text,Xpath,CSS
9.遇到frame框架页面怎么处理?
- 先用driver.switch_to.frame()跳转进去frame,然后再操作页面元素,操作完后使用driver.swith_to.default_content()跳转出来。
10.遇到alert弹出窗如何处理?
- ###需要先定位到alert元素,点击之后
- 使用driver.switch_to.alert方法先跳转到alert弹出窗口
- 然后再通过accept点击确定按钮,通过dismiss点击取消难,通过text()获得弹出窗口的文本。
了解一下就好我们常见的alert弹窗有两种:基于windows弹窗和基于web页面弹窗webdriver是能够处理alert弹窗的,Selenium提供了Alert这个接口。相关操作代码如下:
- Alert alert = driver.switchTo().alert() // 切换到Alert
- alert.accept() // 点击弹窗上确定按钮
- alert.dismiss() // 点击弹窗的取消按钮
- alert.getText() // 获取弹窗上的文本文字内容
- alert.sendkeys() // 有些弹窗还支持文本输入,这个可以把要输入字符通过sendkeys方法输入
11.如何处理多窗口?
多窗口之间跳转处理,我们在项目中也经常遇到。就是,当你点击一个链接,这个链接会在一个新的tab打开,然后你接下来要在新tab打开的页面查找元素,
1.我们在点击链接前使用driver.current_window_handle获得当前窗口句柄。
2.再点击链接。点击后通过driver.window_handles获得所有窗口的句柄,
3.然后再循环找到新窗口的句柄,然后再通过driver.switch_to.window()方法跳转到新的窗口。
12.怎么验证元素是enable/disabled/checked状态?
定位元素后:分别通过isEnabled(),isSelected(),isDisplayed()三个方法进行判断。
13.如何处理下拉菜单?
在Selenium中有一个叫Select的类,这个类支持对下拉菜单进行操作。使用方法如下:
1.定位元素
2.把定位的元素转化成Select对象。
- sel = Select(定位的元素对象)
3.通过下标或者值或者文本选中下拉框。
- sel.select_by_index(index);
- sel.select_by_value(value);
- sel.select_by_visible_text(text);
14.举例一下说明一下你遇到过哪些异常
常见的selenium异常有这些:
- NoSuchElementException:没有该元素异常
- TimeoutException :超时异常
- ElementNotVisibleException :元素不可见异常
- NoSuchAttributeException :没有这样属性异常
- NoSuchFrameException :没有该frame异常
15.关闭浏览器中quit和close的区别
- 简单来说,两个都可以实现退出浏览器session功能,close是关闭你当前聚焦的tab页面,而quit是关闭全部浏览器tab页面,并退出浏览器session。
- quit一般用在结束测试之前的操作,close用在执行用例过程中关闭某一个页面的操作。
16.在Selenium中如何实现截图,如何实现用例执行失败才截图
在Selenium中提供了一个get_screenshot_as_file()的方法来截图的,一般结合try/except捕获异常时使用,进行错误截图#官网的最新方法
- driver.save_screenshot(’./image.png’)
17.如何实现文件上传?
定位元素后,直接使用send_keys()方法设置就行,参数为需要上传的文件的路径。
18、自动化中有哪三类等待?他们有什么特点?
1.线程等待(强制等待)如time.sleep(2):线程强制休眠2秒钟,2秒过后,再执行后续的代码。建议少用。
2.imlicitlyWait(隐式等待)会在指定的时间范围内不断的查找元素,直到找到元素或超时,特点是必须等待整个页面加载完成。
3.WebDriverWait(显式等待)通常是我们自定义的一个函数代码,这段代码用来等待某个元素加载完成,再继续执行后续的代码。
19.如何实现鼠标悬停,键盘事件和拖拽动作?
在Webdriver中,处理键盘事件和鼠标事件,一般使用Actions类提供的方法,包括鼠标悬停,拖拽和组合键输入。这里介绍几个方法
- 方法:clickAndHold()
- 使用场景:找到一个元素,点击鼠标左键,不放手。自己可以点击鼠标不松开试试这个场景。
- 方法:contentClick()
- 使用场景:模拟鼠标右键点击,一般右键会带出菜单来。
- 方法:doubelClick()
- 使用场景:模拟鼠标双击
- 方法:dragAndDrop(source,target)
- 使用场景:模拟从source这个位置,拖拽一个元素到target位置
- 键盘事件方法:keyDown(keys.ALT), keyUp(keys.SHIFT)
- 使用场景:点击键盘事件,分为两个动作,一个点击键盘,第二个动作是释放点击(松开)
20.鼠标操作常用函数
- context_click() 右击 --> 此方法模拟鼠标右键点击效果
- double_click() 双击 --> 此方法模拟双标双击效果
- drag_and_drop() 拖动 --> 此方法模拟双标拖动效果
- move_to_element() 悬停 --> 此方法模拟鼠标悬停效果
- perform() 执行 --> 此方法用来执行以上所有鼠标方法
21. 键盘操作常用函数
- send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
- send_keys(Keys.SPACE) 空格键(Space)
- send_keys(Keys.TAB) 制表键(Tab)
- send_keys(Keys.ESCAPE) 回退键(Esc)
- send_keys(Keys.ENTER) 回车键(Enter)
- send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
- send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
- send_keys(Keys.CONTROL,‘v’) 全选(Ctrl+V)
- send_keys(Keys.CONTROL,‘x’) 复制(Ctrl+X)
22.selenium*中的定位方式
- id:根据id来获取元素,返回单个元素,id值一般是唯一的;
- name:根据元素的name属性定位;
- tagName:根据元素的标签名定位;
- className:根据元素的样式class值定位;
- linkText:根据超链接的文本值定位;
- partialLinkText:根据超链接的部分文本值定位;
- cssSelector:css选择器定位;
- xpath:通过元素的路径来定位;
- 优先级最高:ID
- 优先级其次:name
- 优先级再次:CSS selector
- 优先级再次:Xpath
23.在你做自动化过程中,遇到了什么问题吗?举例下
这个问题,不管是自动化还是任何工作,都会被问到。主要想知道你是如何解决问题的,从而推断你问题分析和解决的能力。当然有遇到问题和挑战,主要有以下几点:频繁地变更UI,经常要修改页面对象里面代码 运行用例报错和处理,例如元素不可见,元素找不到这样异常 测试脚本复用,尽可能多代码复用 一些新框架产生的页面元素定位问题,例如ck编辑器,动态表格等。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?