⾃动化测试⾯试题及答案⼤全(5)
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
selenium怎么使用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()
/
/ 获取弹窗上线上的⽂本⽂字内容
// 有些弹窗还⽀持⽂本输⼊,这个可以把要输⼊字符通过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;
24.在Selenium中如何实现截图,如何实现⽤例执⾏失败才截图
在Selenium中提供了⼀个TakeScreenShot这么⼀个接⼝,这个接⼝提供了⼀个getScreenshotAs()⽅法可以实现全屏截图。然后我们通过java中的FileUtils来实现把这个截图拷贝到保存截图的路径。
代码举例:
File src=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
try {
// 拷贝到我们实际保存图⽚的路径
}
catch (IOException e)
{
System.out.Message());
}
如果要实现执⾏⽤例发现失败就⾃动截图,那么我们需要把这个截图⽅法进⾏封装。然后在测试代码中的catch代码块去调⽤这个截图⽅法。这个我们在POM的框架中⼀般是把截图⽅法封装到BasePage这个⽂件中。
25.在Selenium中如何实现拖拽滚动条?
在Selenium中通过元素定位会⾃动帮你拖拽到对应位置,所以是没有⾃带的scoll⽅法。但是这个是有限制,例如当前页⾯⾼度太长,默认是页上半部分,你定位的元素在页尾,这个时候可能就会报元素不可见的异常。我们就需要利⽤javaScript来实现拖拽页⾯滚动条。
我们⼀般可以两个⽅法去拖拽,⼀个是根据拖拽的坐标(像素单位),另外⼀个是根据拖拽到⼀个参考元素附件。
代码举例(根据元素坐标拖拽):
JavascriptExecutor jse= (JavascriptExecutor)driver;
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.如何获取页⾯标题,悬浮⽂本和错误⽂本,并验证?
标题,我们可以通过Title()⽅法来得到⼀个字符串,然后使⽤字符串的containts⽅法或者equals⽅法去进⾏断⾔。
悬浮⽂本(tooltip),⼀般是利⽤Actions类,然后⿏标悬停⽅法,然后通过getText()⽅法来得到这个tooltip字符串。
错误信息,直接把这个错误字段先进⾏定位,然后通过getText()⽅法拿到错误⽂本,主要的断⾔有包含,相等,不相等,不包含,以什么开头等。
32.在selenium⾃动化测试中,你⼀般完成什么类型的测试?
主要是冒烟测试和回归测试。回归测试主要写⼀些功能稳定,容易实现的场景,通过⾃动化⼿段去实现,节约测试时间。
33.你是如何管理你的测试⽤例并执⾏?
写⽤例和管理并执⾏⽤例,我们都需要借助单元测试框架来实现,如果是Java语⾔⼀般有junit和TestNG,如果是python,常见的有unittest。
就你实际情况,说⼀下。例如我使⽤TestNG⽐较多,需要配置l⽂件来实现测试⽤例的执⾏。有时候需要配置多个l去实现不同的任务场景。再展开,可能问你⼀下testng框架的知识点。例如,⽅法依赖,⽤例执⾏优先级,数据源驱动等。
34关于⾃动化测试报告⽣成?
我个⼈⼀般⽤TestNG原⽣的测试报告,也有第三⽅叫reportNG的插件,不过我没有实际使⽤过。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论