- 香港留学中介机构排名:六大核心维度构建评价体系(5-26)
- 一、排名背景与评价维度 香港,作为亚洲地区关键的教育中心,其高等教育资源吸引了众多国际学生的目光
自动化测试面试题及答案
自动化技术涵盖众多领域,与控制论、信息论、系统工程、计算机科学、电子技术、液压气压技术以及自动控制等多个学科紧密相连。为此,特此为您汇编了一系列自动化测试面试题目及其解答,期望对您的求职之路有所助益。
自动化测试面试题
1. 你比较熟悉那种自动化测试工具?
2. 你在你以前工作中是如何使用自动化测试工具的?
3. 介绍一下你在利用自动化测试工具的过程中遇到的一些问题
4. 你是如何计划自动化测试的?
5. 自动化测试能提高测试效率吗?
6. 数据驱动自动化究竟是指什么?
7. 测试自动化的主要特征有哪些?
8. 自动化测试可以代替手工测试吗?
9.自动化测试的好处是什么?
10. 自动化测试容易出现的误区有哪些?
11. 介绍一下测试自动化的常见问题?
12. 你知道哪些测试自动化的脚本技术?
13. 测试用例的设计可以自动化吗?
自动化测试面试题及答案1
一、第一个最常被问到的问题:你最熟悉的元素定位方式有哪些?
通过id标识来查找对应元素,结果将呈现单一元素,通常情况下,该id的唯一性确保了检索的准确性。
name :根据元素的 name 属性定位;
tagName :根据元素的标签名定位;
className :根据元素的样式 class 值定位;
linkText :根据超链接的文本值定位;
通过超链接的部分文本内容进行定位识别。
cssSelector : css 选择器定位;
xpath :通过元素的路径来定位;
优先级最高: ID
优先级其次: name
优先级再次: CSS selector
优先级再次: Xpath
二、如果一个元素无法定位,你一般会考虑哪些因素呢?
在实际的自动化测试操作中,这种情况时常出现,通常我们可以从以下几个角度进行思考:
1、元素定位的方式有误,可以检查元素定位的方法是否正确
2、页面元素加载过慢,需要添加等待时间
在页面布局中存在多个框架,操作时需首先切换至目标框架,然后才能准确进行元素定位。
三、如果一个元素无法定位,你一般会考虑哪些因素呢?
这个在我们实际自动化测试过程中也会经常遇到,那一般可以从以下几个方面去考虑:
1、元素定位的方式有误,可以检查元素定位的方法是否正确
2、页面元素加载过慢,需要添加等待时间
3、页面中有框架面,需要先切换到正确的frame框架再进行定位
四、说一说你知道的自动化测试框架
1、RobotFramework
2、Pytest
3、Unittest
4、PyUnit
五、自动化测试中有几种等待方式,它们之间有什么区别吗?
1、强制等待
使用time.sleep(3)进行暂停,这表示必须等待3秒钟之后才能继续执行后续的代码。这种方法缺乏灵活性,因为即便页面在3秒内已经完全加载,程序仍需坚持等待完整的3秒时间才能进行后续操作。
2、隐式等待
隐式等待:在等待过程中,系统会持续寻找目标元素,一旦发现目标,即可终止等待。然而,采用这种等待方式的前提是必须等待整个页面完全加载完毕,方可执行后续操作。
3、显式等待
WebDriverWait所采用的等待方式,是专门针对特定元素进行等待的,一旦该元素加载完毕,便可以继续执行后续的代码。这种等待方式具有很高的灵活性。
六、什么是PO模式,它有哪三层?三者的关系是怎样的?
PO模式,本质上是一种自动化的测试设计理念,它将页面视为一个整体对象,而页面中的各个元素则被视为该对象的属性和功能。通常,PO模式包含三个主要层次:
基础层:封装一些最基础的方法
页面对象层:元素定位,页面操作等
测试用例层:业务逻辑,数据驱动
这三层的关系:
页面对象层继承基础层,测试用例层调用页面对象层
自动化测试面试题及答案2
1.Selenium是否支持桌面应用软件的自动化测试。
Selenium无法对桌面软件进行自动化测试操作。其定位元素的方式依赖于网页元素的特定属性。相较之下,其他桌面软件的自动化测试工具则是依据桌面元素的具体位置进行定位。不过,目前市面上也有部分工具能够通过桌面元素的属性进行定位。
2.Selenium是否支持用例的执行的引擎。
引擎就如同是一台发动机。Selenium并未配备测试用例及测试套件的管理与执行功能。因此,我们必须依赖第三方单元测试框架来完成用例的管理和执行任务。比如,在Java中,我们可以使用Junit或testNG;而在Python中,则可以使用unittest单元测试框架。
3.Seleinum是否有读取excel文件的库
此处所需,需借助外部工具,比如Apache POI插件。
4.Selenium有哪些组件?
Selenium IDE是早期的一种工具,它仅限于在Firefox浏览器上安装使用,并具备自动化脚本的录制功能。此外,还有remote RC、Grid以及webdriver等选项。在众多工具中,webdriver通常是我们最为关键的选择。
5.Selenium有什么限制或者缺陷
Selenium不适用于桌面应用程序的自动化测试,除了网络应用和移动端程序。在编写软件测试报告以及进行用例管理时,必须借助第三方插件,比如Junit、TestNG或unittest。鉴于Selenium是一款免费软件,供应商并不提供相应的支持与服务,遇到问题时,用户只能向Selenium社区寻求帮助。此外,学习selenium或许存在一定的难度,这要求学习者具备一定的编程语言基础,方能熟练掌握。
6.在selenium中,有哪些不同定位元素方法
身份标识/类名/名称/链接文本/部分链接文本/路径/CSS选择器
7.什么是imlicitlyWait(隐式等待)
webdriver 将在设定的时间限制内持续寻找目标元素,直至成功定位到该元素或达到超时限制。
8.什么是expliciteWait(显式等待)
这通常是一段我们自行编写的程序,其功能是暂停执行,直到满足特定条件后,方才继续进行后续的程序指令。
9.什么是线程等待(硬式等待)
若执行Thread.sleep(2000),则webdriver线程将强制暂停2秒钟,待此2秒钟时间结束后,方可继续执行后续的代码指令。
10.什么是pollingEvery
这是一种设定了特定时间间隔后执行某项操作的安排,比如设定每隔一秒钟就进行一次元素的查找。
driver配置了一个新的等待对象wait,该对象将在30秒内对driver进行等待处理。
执行等待操作,每隔一秒钟进行一次轮询。
执行查找操作,定位到指定元素,通过指定路径(xxxx)进行筛选。
你所编写的测试脚本是否具备在多种浏览器环境中顺利执行的能力,是否能够适应不同浏览器的跨平台兼容性?
确实,我所编写的测试案例在IE、火狐以及谷歌这三种主流浏览器中均能顺利执行。由于主要在Windows系统下执行脚本,因此对于macOS系统下的Safari浏览器尚未进行编写。实现这一跨浏览器兼容性的核心思想是,将浏览器类型信息记录在配置文件中,并通过代码中的if语句判断配置文件中指定的浏览器类型,进而确定使用何种浏览器来执行测试案例。
12.什么是POM,为什么要使用它
POM即Page Object Model的缩写,其核心是一种设计理念,而非具体的框架。其核心理念是将各个页面视为独立的对象,而页面中的各个元素及其操作方法则被视为该对象的属性与行为。因此,我们自然而然地运用了面向对象的思想来构建我们的页面。通常情况下,每个页面对应一个类文件,该文件中包含了该页面的元素定位及业务操作方法。
为了确保我们的测试用例既简洁又明了,我们常常在页面对象中封装了一系列的业务操作方法,测试脚本仅需调用这些方法即可完成测试任务。
此问题尚有一面试题与之关联,涉及页面元素频繁变动时应对策略。对此,我的做法是采纳POM理念。其优势在于,仅需对某一页面进行修改,便能更新该页面对象的定位及方法,无需对脚本进行任何调整。
13.在你做自动化过程中,遇到了什么问题吗?举例下
这个问题,不论是关于自动化技术还是其他任何工作领域,都常常被提及。其主要目的是了解你处理问题的方法,进而评估你的问题分析和解决能力。
当然有遇到问题和挑战,主要有以下几点:
频繁地变更UI,经常要修改页面对象里面代码
运行用例报错和处理,例如元素不可见,元素找不到这样异常
测试脚本复用,尽可能多代码复用
一些新兴框架所构建的页面中,诸如CK编辑器、动态表格等元素,在定位方面出现了问题。
请您举例说明,在selenium自动化测试中,您都遇到了哪些不寻常的情况。
通过这个提问,我大致能判断出你撰写过相当数量的脚本。在编写脚本的过程中,最常遇到的异常情况便是,无法定位到相应的元素。
常见的selenium有以下这些:
ElementNotSelectableException:该元素不可被选中,触发选择异常。
ElementNotVisibleException,即元素不可见错误异常
NoSuchAttributeException:该属性不存在,引发异常情况。
NoSuchElementException:此元素不存在,引发了异常情况。
NoSuchFrameException:此框架不存在,引发了异常情况。
TimeoutException : 超时异常
当前状态下,该元素无法呈现于视野之中。
15 如何处理alert弹窗
我们通常遇到的警报式弹窗主要分为两大类:一类是源自Windows操作系统的弹窗,另一类则是基于网页页面的弹窗。
众所周知,webdriver具备处理alert弹窗的功能,而Selenium则提供了一个名为Alert的接口。下面是相应的操作代码示例:
// 切换到Alert

Alert对象alert是通过调用driver对象的switchTo方法,并传入alert参数得到的。
// 点击弹窗上确定按钮
alert.accept();
// 点击弹窗的取消按钮
alert.dismiss()
// 获取弹窗上线上的文本文字内容
alert.getText();
某些弹窗具备文本输入功能,通过sendkeys方法,可以输入所需字符。
alert.sendkeys();
16 在selenium中如何处理多窗口?
在进行selenium自动化测试时,我们常常会遇到多窗口间的跳转问题。具体来说,当你点击某个链接时,该链接会在一个新的标签页中打开。随后,你需要在新的标签页中查找元素。因此,在这种情况下,我们必须使用swithTo方法来实现窗口的切换。
为了获取当前浏览器中各个窗口的句柄,需进行判断,进而决定是切换至新句柄还是继续使用旧句柄。
你在寻找元素时,是否曾在Frame中遇到过类似情况?对于Frame内的元素定位,你又是如何操作的?
有时即便我们确认元素定位的公式无误,却依然收到“未找到元素”的提示,这时我们必须审视该元素是否存在于frame内。若确实存在,我们就需借助topwindow,通过执行swithcTo.Frame()操作来切换至目标frame。定位frame时,我们可以采用frame的名称、ID或索引三种不同的方式。
如何确认选中的复选框处于启用/禁用/勾选/未勾选/显示/不显示的状态?
通过以下方法来验证元素是enable 还是disable
driver通过xpath定位到“元素定位表达式”,并获取该元素的enable属性,判断其是否处于可用状态,将结果赋值给变量enabled。
通过以下方法来验证元素是select/check
driver通过By.xpath定位到特定元素,找到该元素后,判断其是否被选中,并将结果赋值给变量checked。
通过以下途径,我们可以检验元素是否处于显示状态或非显示状态:
driver通过xpath定位表达式找到了相应元素,并判断该元素是否可见,将结果赋值给变量displayed。
19 如何处理下拉菜单?
通常,我们还可以利用点击操作来选取下拉菜单中的选项。此外,Selenium框架中存在一个名为Select的类,它专门提供了对下拉菜单进行交互的功能。
基本使用语法是这样的:
创建一个名为Select的实例,该实例通过element参数进行初始化;即:Select Se = new Select(element);
Se.selectByIndex(index);
Se.selectByvalue(value);
Se.selectByVisibleText(text);
20 在日历这种web 表单你是如何处理的?
我们需要对当前网页上使用的日历插件的前端代码进行深入分析,以确定是否能够通过元素定位来点击并选择日期。若此方法不可行,那么可能需要引入JavaScript技术。此外,某些日历控件中包含文本输入框,我们可以直接使用`sendKeys()`方法来输入所需的时间数据。
21关闭浏览器中quit和close的区别
简而言之,两者均能实现退出浏览器会话的功能,其中close指的是关闭当前你正在操作的标签页,而quit则是关闭所有浏览器标签页并退出会话。明白了这两者的区别后,我们可以了解到quit通常用于测试结束前的操作,而close则适用于在执行测试用例时关闭特定页面的情况。
22 什么是页面加载超时
在Selenium中,存在一种名为Page Load wait的机制。然而,在脚本执行速度过快的情况下,有时网页的某些部分尚未完全加载,这会导致元素不可见或查找失败的异常。为了确保脚本的顺畅运行,我们可以调整页面加载的超时时间设置。该代码段中,驱动程序设置了页面加载的超时时间为10秒,单位为秒。
该行代码的功能在于,一旦页面加载时间超过10秒钟,系统便会触发一个页面加载超时的错误提示。
什么是JavaScript执行器?在何种情况下,你会需要使用它呢?
JavaScript Executor是一个接口,它为driver对象提供了执行JavaScript脚本的能力,并允许对其进行前端元素的属性和值进行访问与修改。
存在众多场合,我们或许或必须依赖JavaScript来完成。
1.元素通过现有定位表达式不能够实现点击
2.前端页面试用了ck-editor这个插件
3.处理时间日期插件(可能)
4.生成一个alert弹窗
5.拖拽滚动条
基本语法:
通过类型转换,将driver对象强制转换为JavascriptExecutor接口的实现,得到js执行器。
执行脚本函数js.executeScript,传递脚本内容Script和参数Arguments。
在Selenium框架下,要实现截图功能,可以采取以下步骤;而为了确保只有在用例执行失败时才进行截图,则需设置相应的条件判断。
Selenium提供了一个名为TakeScreenShot的接口,该接口包含一个getScreenshotAs()方法,用于执行全屏截图。接着,我们利用Java中的FileUtils类,将所捕获的截图复制至预定的保存路径。
代码举例:
文件src等于通过将driver转换为TakesScreenshot接口后,调用其getScreenshotAs方法获取的截图,并将截图类型指定为FILE。
try {
// 拷贝到我们实际保存图片的路径
FileUtils执行了文件复制的操作,源文件为src,目标文件被指定为位于C:/selenium目录下的error.png。
catch (IOException e)
输出异常信息:e.getMessage()
若要实现执行测试用例时一旦出现失败便自动进行截图,我们便需对截图功能进行模块化处理。随后,在测试代码的异常处理部分,即catch代码块中,调用此封装后的截图功能。通常情况下,在POM(Page Object Model)框架中,我们会将截图方法封装在名为BasePage的文件内。
25.在Selenium中如何实现拖拽滚动条?
在Selenium工具中,元素定位功能能够自动将页面元素拖拽至目标位置,因此该工具本身并未提供滚动功能。然而,这一操作存在一定的局限性,比如当页面高度超出预期时,默认滚动至页面顶部,若目标元素位于页面底部,就可能触发元素不可见的错误。在这种情况下,我们需借助JavaScript代码来手动控制页面滚动条进行拖拽。
通常情况下,我们有两种拖拽方式可供选择,第一种是依据拖拽点的坐标(以像素为单位),而第二种则是基于拖拽至某个参照元素的周边。
代码举例(根据元素坐标拖拽):
通过类型转换,将driver对象转换为具有执行JavaScript能力的对象,得到JavascriptExecutor类型的实例jse。
执行代码:jse.executeScript,参数为字符串“window.scrollBy(0,250)”,无需额外参数。
26.如何实现文件上传?
在Web页面的文件上传操作中,我们可以将文件在硬盘上的完整路径直接利用sendKeys方法进行上传。若此方法无法完成上传任务,我们或许需要依赖其他第三方工具,例如我曾使用过的autoIT工具。
还有一个方法是利用robot类
27.如何处理“不受信任的证书”的问题?
登录12306网站时,若未曾下载并安装该网站的根证书,你将面临一个提示页面,告知无法信任该网站的证书,从而拦截页面打开。
下面举例火狐和谷歌上处理这个问题的基本代码
火狐:
// 创建firefoxprofile
创建一个新的Firefox配置文件实例,命名为profile。
// 点击继续浏览不安全的网站
配置文件设置接受不受信任的证书为开启状态。
// 使用带条件的profile去创建一个driver对象
创建一个新的FirefoxDriver实例,并指定使用特定的配置文件,该实例被赋值给driver变量。
Chrome:
// 创建类DesiredCapabilities的对象
DesiredCapabilities对象cap被初始化为DesiredCapabilities.chrome()所指定的配置;
将ACCEPT_SSL_CERTS变量的值设定为开启状态。
创建一个具备特定功能的ChromeDriver实例。
创建一个WebDriver实例,名为driver,并使用配置对象cap来初始化ChromeDriver。
28.什么是Firefox Profile?
Profile集合了一系列文件,其主要功能是保存用户在火狐浏览器中的个人数据,诸如书签、密码、个人偏好设置以及下载文件的存储路径等。简言之,当你启动火狐浏览器并输入about://config时,会发现该页面中的一些配置选项是可以利用profile进行更改的。
29.如何实现鼠标悬停,键盘事件和拖拽动作?
在Webdriver框架中,我们通常通过Actions类来实现对键盘和鼠标事件的操控,这其中包括鼠标的悬停、拖动以及组合键的输入等功能。
这里介绍几个方法
方法:clickAndHold()
在特定情境下,需选取某个对象,然后按下鼠标左键,并保持持续按住。您可以亲自尝试这一操作,体验一下这个过程。
方法:contentClick()
使用场景:模拟鼠标右键点击,一般右键会带出菜单来。
方法:doubelClick()
使用场景:模拟鼠标双击
方法:dragAndDrop(source,target)
将source处的元素拖动至target所在的位置。
键盘操作方法:执行按键按下动作(keys.ALT),随后进行按键释放操作(keys.SHIFT)。
在触发键盘事件时,该事件被分解为两个独立的行为,首先是按下键盘,随后紧接着的是释放按键的动作。
30.在执行脚本过程,如何实现当前元素高亮显示?
这实际上是通过运用JavaScript技术来调整页面中特定元素的背景色调,以此实现使其更加醒目的目的。
31.如何获取页面标题,悬浮文本和错误文本,并验证?
标题,我们能够利用driver对象的getTitle()函数来获取一个字符串,紧接着,我们可以运用字符串的包含检测方法contains()或完全匹配方法equals()来执行断言操作。
悬浮文本,通常是通过调用Actions类,运用鼠标悬停操作,进而利用getText()函数来获取tooltip文本内容。
识别错误数据,首先需锁定该错误数据字段,接着运用getText()函数提取错误文本,此过程中涉及的主要断言包括包含、数值相等、数值不等、不包含以及以特定字符开头等。
在进行selenium自动化测试时,通常我们会执行哪些种类的测试?
主要涉及烟雾测试以及回溯检验。回溯检验着重于编写那些功能稳固、易于操作的场景,并借助自动化技术来完成,以此达到节省测试周期的目的。
33.你是如何管理你的测试用例并执行?
编写测试案例以及对其执行,我们离不开单元测试工具的支持。在Java编程语言中,通常我们会选用JUnit或TestNG作为测试框架。而对于Python,unittest则是普遍采用的选择。
根据你的具体情况,请谈谈。比如,我频繁使用TestNG进行测试,必须对testng.xml文件进行设置以执行测试案例。有时,为了应对不同的任务场景,我需要配置多个testng.xml文件。此外,还可能向你提问关于TestNG框架的相关知识点,比如方法之间的依赖关系、用例执行的优先级以及数据源驱动等。
温馨提示:本内容地址http://m.ysjob.cc/article/articledetail-328988.html转载请注明,以上自动化测试面试题及答案:工具使用、计划与相关问题解析资讯信息来自颍上人才网(颍上地区最大的颍上人才网,颍上人才网)