2022测试岗各大厂面试真题汇总(附带答案解析)

2022测试岗各大厂面试真题汇总(附带答案解析)_第1张图片

前言

相信正在阅读文章的朋友们大部分都在准备面试或是在准备面试的路上了,首先祝愿大家都能拿到 dream offer 成功上岸(手动撒花),希望这篇文章能给大家带来一些帮助,也欢迎各位同学在评论区一起讨论面经 or 交流心得,如果有更好的面试八股文答案也欢迎抛出,让大家掌掌眼。

话不多说,我们直接看题说话。

1.Selenium是否支持桌面应用软件的自动化测试。

Selenium不支持桌面软件的自动化测试,Selenium是根据网页元素的属性才定位元素,而其他桌面软件自动化测试工具是根据桌面元素的位置来定位元素,当然现在也有根据桌面元素的属性来定位的。

2.Selenium是否支持用例的执行的引擎。

引擎好比就是一个发动机。Selenium是没有关于测试用例和测试套件管理和执行的模块。我们需要借助第三方单元测试框架来实现用例管理和用例的执行。例如Java中有Junit或者testNG,Python中有unittest单元测试框架。

3.Seleinum是否有读取excel文件的库

没有,这里需要用到第三方工具。例如Apache POI插件。

4.Selenium有哪些组件?

最早的有Selenium IDE,IDE只支持安装在fiefox上一个插件,支持录制自动化脚本。还有

remote RC,和Grid 和webdriver。我们一般最重要的就是使用webdriver。

5.Selenium有什么限制或者缺陷

除了基于web的软件和mobile的程序,selenium不支持桌面软件自动化测试。软件测试报告,和用例管理只能依赖第三方插件,例如Junit/TestNG和unittest。由于它是免费的软件,所以没有供应商去提供支持和服务,有问题,只能求助selenium社区。还有一个就是,selenium入门门槛可能有点高,需要具备一定编程语言基础的才能玩转。

6.在selenium中,有哪些不同定位元素方法

ID/className/Name/LinkText/PartialLinkText/Xpath/CSS selector

7.什么是imlicitlyWait(隐式等待

webdriver 会在指定的超时时间范围内不断的查找元素,直到找到元素或超时

8.什么是expliciteWait(显式等待)

通常是我们自定义的一段代码,这段代码用来等待某种条件发生后,再继续执行后续的代码

9.什么是线程等待(硬式等待)

如Thread.sleep(2000),webdriver线程强制休眠2秒钟,2秒过后,再执行后续的代码。

10.什么是pollingEvery

这个是设置个一段时间就去做一件事,例如下面设置隔一秒就去查找元素一次。

WebDriverWait wait = new WebDriverWait(driver,30);
wait.pollingEvery(1, TimeUnit.SECONDS);
driver.findElement(By.xpath(“xxxx”));

11.你写的测试脚本能在不同浏览器上运行吗,支持跨浏览器平台吗

是的,我写的测试用例能在IE,火狐和谷歌这三种浏览器上运行。主要是在windows平台上运行脚本,所以mac的safari浏览器暂时没有写过。主要实现这个跨浏览器的思想就是,把浏览器类型写到配置文件,代码里写if语句去判断配置文件的浏览器的类型,来决定用什么浏览器去执行测试用例。

12.什么是POM,为什么要使用它

POM是Page Object Model的简称,它是一种设计思想,而不是框架。大概的意思是,把一个一个页面,当做一个对象,页面的元素和元素之间操作方法就是页面对象的属性和行为,所以自然而然就用了类的思想来组织我们的页面。一般一个页面写一个类文件,这个类文件包含该页面的元素定位和业务操作方法

为了我们测试用例写的简单,清晰,我们很多时候在页面对象会封装很多业务操作方法,测试脚本只需要调用相关方法就可以。

还有一个可能和这个问题相关的面试题,如果页面元素经常发生需求变化,你是如何做,答案就是采用POM思想。好处就是只要改一个页面,我就去修改这个页面对象的元素定位和相关方法,脚本不需要修改。

13.在你做自动化过程中,遇到了什么问题吗?举例下

这个问题,不管是自动化还是任何工作,都会被问到。主要是想知道你是如何解决问题的,从而推断你问题分析和解决的能力。

当然有遇到过问题和挑战,主要有以下几点:

频繁地变更UI,经常要修改页面对象里面代码

运行用例报错和处理,例如元素不可见,元素找不到这样的异常

测试脚本复用,尽可能多代码复用

一些新框架产生的页面元素定位问题,例如ck编辑器,动态表格等

14.举例一下你遇到过哪些异常,在selenium自动化测试过程中

通过这个问题,大概知道你写过多少脚本。写脚本过程最常见的异常就是,这个元素无法找到。

常见的selenium有以下这些:

1、ElementNotSelectableException :元素不能选择异常
2、ElementNotVisibleException :元素不可见异常
3、NoSuchAttributeException :没有这样属性异常
4、NoSuchElementException:没有该元素异常
5、NoSuchFrameException :没有该frame异常
6、TimeoutException : 超时异常
7、Element not visible at this point :在当前点元素不可见

15 如何处理alert弹窗

我们常见的alert弹窗有两种:基于windows弹窗和基于web页面弹窗

我们知道,webdriver是能够处理alert弹窗的,Selenium提供了Alert这个接口。相关操作代码如下:

// 切换到Alert
Alert alert = driver.switchTo().alert();
// 点击弹窗上确定按钮
alert.accept();
// 点击弹窗的取消按钮
alert.dismiss()
// 获取弹窗上线上的文本文字内容
alert.getText();
// 有些弹窗还支持文本输入,这个可以把要输入字符通过sendkeys方法输入
alert.sendkeys();

16 在selenium中如何处理多窗口?

这个多窗口之间跳转处理,在实际selenium自动化测试经常遇到。就是,你点击一个链接,这个链接会在一个新的tab打开,然后你接下来要查找元素在新tab打开的页面,所以这里需要用到swithTo方法。

需要获取当前浏览器多窗口句柄,然后根据判断跳转新句柄还是旧句柄

17 你查找元素遇到过在Frame里面吗?你是如何处理Frame里面元素定位的?

有时候我们知道元素定位表达式没有问题,但是还是提示no such element,那么我们就需要考虑这个元素是否在frame中。如果在,我们就需要从topwindow,通过swithcTo.Frame()方法来切换到目标frame中,可以通过frame的name和id和索引三种方法来定位frame。

18 怎么验证勾选框是enable/disabled/ checked/Unchecked/ displayed/ not displayed?

通过以下方法来验证元素是enable 还是disable
boolean enabled = driver.findElement(By.xpath(“元素定位表达式”)).isEnabled();
通过以下方法来验证元素是select/check
boolean checked = driver.findElement(By.xpath(“元素定位表达式”)).isSelected();
通过以下方法来验证元素是dispalyed还是not display
boolean displayed = driver.findElement(By.xpath(“元素定位表达式”)).isDisplayed();

19 如何处理下拉菜单?

通常我们也可以通过Click方法来点击下拉菜单里面的元素,还有一种方法,在Selenium中有一个类叫Select,支持这种下拉菜单交互的操作。

基本语法使用是这样的:

Select Se=new Select(element);
Se.selectByIndex(index);
Se.selectByvalue(value);
Se.selectByVisibleText(text);

20 在日历这种web 表单你是如何处理的?

首先要分析当前网页试用日历插件的前端代码,看看能不能通过元素定位,点击日期实现,如果不能,可能需要借助javascript。还有些日历控件一个文本输入框,可以直接sendKeys()方法来实现传入一个时间的数据。

21关闭浏览器中quit和close的区别

简单来说,两个都可以实现退出浏览器session功能,close是关闭你当前聚焦的tab页面,而quit是关闭全部浏览器tab页面,并退出浏览器session。知道这两个区别,我们就知道quit一般用在结束测试之前的操作,close用在执行用例过程中关闭某一个页面的操作。

22 什么是页面加载超时

Selenium中有一个 Page Load wait的方法,有时候,我们执行脚本的速度太快,但是网页程序还有一部分页面没有完全加载出来,就会遇到元素不可见或者元素找不到的异常。为了解决问题,让脚本流畅的运行,我们可以通过设置页面加载超时时间。具体代码是这个:driver.manage().timeouts().pageLoadTimeout(10,TimeUnit.SECONDS);

这行作用就是,如果页面加载超过10秒还没有完成,就抛出页面加载超时的异常。

23.什么是JavaScript Executor,你什么时候会用到这个?

JavaScript Executor是一个接口,给driver对象提供一个执行javaScript并访问和修改前端元素属性和值。

还是有比较多的场景,我们可能或者需要借助javaScript来实现:

1.元素通过现有定位表达式不能够实现点击

2.前端页面试用了ck-editor这个插件

3.处理时间日期插件(可能)

4.生成一个alert弹窗

5.拖拽滚动条

基本语法:

JavascriptExecutor js =(JavascriptExecutor) driver;
js.executeScript(Script,Arguments);

24.在Selenium中如何实现截图,如何实现用例执行失败才截图

在Selenium中提供了一个TakeScreenShot这么一个接口,这个接口提供了一个getScreenshotAs()方法可以实现全屏截图。然后我们通过java中的FileUtils来实现把这个截图拷贝到保存截图的路径。

代码举例:

File src=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
try {
// 拷贝到我们实际保存图片的路径
FileUtils.copyFile(src,new File(“C:/selenium/error.png”));
}
catch (IOException e)
{
System.out.println(e.getMessage());
}

如果要实现执行用例发现失败就自动截图,那么我们需要把这个截图方法进行封装。然后在测试代码中的catch代码块去调用这个截图方法。这个我们在POM的框架中一般是把截图方法封装到BasePage这个文件中。

25.在Selenium中如何实现拖拽滚动条?

在Selenium中通过元素定位会自动帮你拖拽到对应位置,所以是没有自带的scoll方法。但是这个是有限制,例如当前页面高度太长,默认是页上半部分,你定位的元素在页尾,这个时候可能就会报元素不可见的异常。我们就需要利用javaScript来实现拖拽页面滚动条。

我们一般可以两个方法去拖拽,一个是根据拖拽的坐标(像素单位),另外一个是根据拖拽到一个参考元素附件。

代码举例(根据元素坐标拖拽):

JavascriptExecutor jse= (JavascriptExecutor)driver;
jse.executeScript(“window.scrollBy(0,250)”, “”);

26.如何实现文件上传?

我们在web页面实现文件上传过程中,可以直接把文件在磁盘完整路径,通过sendKeys方法实现上传。如果这种方法不能实现上传,我们就可能需要借助第三方工具,我用过一个第三方工具叫autoIT.

还有一个方法是利用robot类

27.如何处理“不受信任的证书”的问题?

例如,在登录12306网站的时候,如果你没有下载和安装过这个网站的根证书,那么你就会遇到打开12306网站提示证书不受信任的拦截页面。

下面举例火狐和谷歌上处理这个问题的基本代码

火狐:

// 创建firefoxprofile
FirefoxProfile profile=new FirefoxProfile();
// 点击继续浏览不安全的网站
profile.setAcceptUntrustedCertificates(true);
// 使用带条件的profile去创建一个driver对象
WebDriver driver=new FirefoxDriver(profile);
Chrome:
// 创建类DesiredCapabilities的对象
DesiredCapabilities cap=DesiredCapabilities.chrome();
// 设置ACCEPT_SSL_CERTS 变量值为true
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
// 新建一个带capability的chromedriver对象
WebDriver driver=new ChromeDriver(cap);

28.什么是Firefox Profile?

Profile是一组文件,主要用来记录用户在火狐浏览器上的私人信息,例如书签,密码,用户首选项,下载文件夹保存路径等。简单来说,你打开火狐浏览器输入about://config,这个页面有些设置选项是可以通过profile来实现修改的。

29.如何实现鼠标悬停,键盘事件和拖拽动作?

在Webdriver中,处理键盘事件和鼠标事件,一般使用Actions类提供的方法,包括鼠标悬停,拖拽和组合键输入。

这里介绍几个方法

方法:clickAndHold()

使用场景:找到一个元素,点击鼠标左键,不放手。自己可以点击鼠标不松开试试这个场景。

方法:contentClick()

使用场景:模拟鼠标右键点击,一般右键会带出菜单来。

方法:doubelClick()

使用场景:模拟鼠标双击

方法:dragAndDrop(source,target)

使用场景:模拟从source这个位置,拖拽一个元素到target位置

键盘事件方法:keyDown(keys.ALT), keyUp(keys.SHIFT)

使用场景:点击键盘事件,分为两个动作,一个点击键盘,第二个动作是释放点击(松开)

30.在执行脚本过程,如何实现当前元素高亮显示?

这个其实就是利用javaScript去修改当前元素的背景颜色来到达高亮显示的效果,

31.如何获取页面标题,悬浮文本和错误文本,并验证?

标题,我们可以通过driver.getTitle()方法来得到一个字符串,然后使用字符串的containts方法或者equals方法去进行断言。

悬浮文本(tooltip),一般是利用Actions类,然后鼠标悬停方法,然后通过getText()方法来得到这个tooltip字符串。

错误信息,直接把这个错误字段先进行定位,然后通过getText()方法拿到错误文本,主要的断言有包含,相等,不相等,不包含,以什么开头等。

32.在selenium自动化测试中,你一般完成什么类型的测试?

主要是冒烟测试和回归测试。回归测试主要写一些功能稳定,容易实现的场景,通过自动化手段去实现,节约测试时间。

33.你是如何管理你的测试用例并执行?

写用例和管理并执行用例,我们都需要借助单元测试框架来实现,如果是Java语言一般有junit和TestNG,如果是python,常见的有unittest。

就你实际情况,说一下。例如我使用TestNG比较多,需要配置testng.xml文件来实现测试用例的执行。有时候需要配置多个testng.xml去实现不同的任务场景。再展开,可能问你一下testng框架的知识点。例如,方法依赖,用例执行优先级,数据源驱动等。

34关于自动化测试报告生成?

我个人一般用TestNG原生的测试报告,也有第三方叫reportNG的插件,不过我没有实际使用过。

补充

其实到这面试题还远远没有结束,如果以上的面试题还不能满足你的要求,那我只能把我整理了几年的软件测试宝典拿出来了,您接好就行。

2022测试岗各大厂面试真题汇总(附带答案解析)_第2张图片

结语

这篇贴子到这里就结束了,最后,希望看这篇帖子的朋友能够有所收获。如果想以测试为长期发展职业目标,是需要时刻保持学习的,要使自己具备竞争力,无论你现在工作几年,只要行动起来,你就已经占优势了。祝大家2022年能升职加薪,没入职的就早日拿到心仪公司的offer,事事顺遂。

欢迎留言,或是关注我的专栏和我交流。

你可能感兴趣的