盘点——那些你必须知道的自动化测试面试题!

2021年11月20日 阅读数:2
这篇文章主要向大家介绍盘点——那些你必须知道的自动化测试面试题!,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

问题1:Selenium是什么,流行的版本有哪些?javascript

是一个开源的web自动化测试的框架,支持多种编程语言,支持跨浏览器平台进行测试。
Selenium 1.0或Selenium RC
Selenium 2.0或Selenium Webdriver
Selenium 3.0css

问题2:你如何从命令行启动Selenium RC?html

java -jar selenium-server.jar
// 在浏览器中运行一套Selenese脚本
java -jar selenium-server.jar -htmlSuitejava

问题3:在个人机器端口4444不是免费的。我怎样才能使用另外一个端口?node

//你能够在运行selenium服务器时指定端口为 -
Java -jar selenium-server.jar -port 5555web

问题4:什么是Selenium Server,它与Selenium Hub有什么不一样?面试

Selenium Server是使用单个服务器做为测试节点的一个独立的应用程序。 Selenium hub代理一个或多个Selenium的节点实例。一个hub 和多个node被称为Selenium grid。运行SeleniumServer与在同一主机上用一个hub和单个节点建立de Selenium grid相似。数据库

问题5:你如何从Selenium链接到数据库?编程

Selenium是一个Web UI自动化工具。它不提供任何API来创建数据库链接。这取决于你使用Selenium进行自动化的编程语言。在下面的例子中,咱们假设正在使用Java。
一个Connection对象表示与数据库的链接。当咱们使用链接方法链接到一个数据库时,咱们建立了一个链接对象,它表明了与数据库的链接。单个数据库可能有一个链接或多个链接,还可能有多个链接到不一样的数据库上。
咱们可使用Connection对象来作如下事情:
建立用于执行SQL语句的Statement,PreparedStatement和CallableStatement对象。
能够帮助咱们提交或回滚一个JDBC事务。
若是你想知道链接到的数据库或数据源信息,Connection对象经过使用DatabaseMetaData就能够收集有关数据库或数据源的信息。
能够帮助咱们关闭数据源。Connection.isClosed() 方法只有在调用了Connection.close()时才返回true 。此方法用于关闭全部链接。
首先咱们须要经过使用DriverManager.getConnection()方法,创建与数据库的链接。这个方法接受一个包含URL的字符串。DriverManager类尝试查找能够链接到由字符串URL表示的数据库的驱动程序。每当调用getConnection()方法时,DriverManager类都会检查能够链接到URL中指定的数据库的全部已注册的Driver类的列表。
句法:
String url = “jdbc: odbc: makeConnection”;
Connection con = DriverManager.getConnection(url, “userID”, “password”);数组

问题6:Selenium RC中定位器方法有哪些?

ID Name CSS XPATH Dom

问题7:你如何验证多个页面上存在的一个对象?

可使用下面的Selenium命令来检查:
assertTrue(selenium.isElementPresent(locator));

问题8:XPath中使用单斜杠和双斜杠有什么区别?

若是XPath是从文档节点开始,它将容许建立“绝对”路径表达式。
例如 “/ html / body / p”匹配全部的段落元素。

若是XPath在文档中的任意位置开始进行选择匹配,那么它将容许建立“相对”路径表达式。
例如 “// p”匹配全部的段落元素。

问题9:如何编写Selenium IDE / RC的用户扩展?

用户扩展(UX)存储在Selenium IDE或Selenium RC用来激活扩展的单独文件中。它包含用JavaScript编写的函数定义。
由于Selenium的核心是用JavaScript开发的,因此要符合原语言的标准规则来建立扩展。要建立一个扩展,咱们必须用下面的设计格式来编写函数。
// 样例
Selenium.prototype.doFunctionName = function(){}
函数名称前面的“do”告诉Selenium这个函数能够被调用为一个步骤命令,而不是做为内部函数或私有函数被调用。

问题10:如何在页面加载成功后验证元素的存在?

它能够经过下面的代码行来实现。
只需一点时间(以秒为单位)来检查元素,以下所示:

public void waitForElementPresent(String element, int timeout) throws Exception {
for (int second = 0;; second++) {
if (second >= timeout)
fail(“Timeout. Unable to find the Specified element” + element);
try {
if (selenium.isElementPresent(element))
break;
} catch (Exception e) {
}
Thread.sleep(1000);
}}

问题11:你对Selenium Grid有什么了解?它提供了什么功能?

Selenium Grid是一款利用现有计算基础架构大幅加速Web应用程序功能测试的工具。容许测试者轻松地在多台机器上并行运行多个测试,而且能够在异构环境中运行。

基于优秀的Selenium Web测试工具,Selenium Grid容许测试者并行运行多个Selenium Remote Control实例。更好的是,它集成显示全部Selenium远程控制,因此没必要担忧实际的基础设施。Selenium Grid将运行Selenium测试套件所需的时间,缩短到Selenium实例的单个实例运行时间的一小点。

问题12:如何从你的Java Class启动Selenium服务器?

try {
seleniumServer = new SeleniumServer();
seleniumServer.start();
} catch (Exception e) {
e.printStackTrace();
}

问题13:Selenium中有哪些验证点?

Selenium主要有三种验证点 -
检查页面标题
检查某些文字
检查某些元素(文本框,下拉菜单,表等)

问题14:什么是XPath?何时应该在Selenium中使用XPath?

XPath是一种在HTML / XML文档中定位的方法,可用于识别网页中的元素。若是没有与页面上的元素相关联的名称/ ID,或者名称/ ID的一部分是常量,则必须使用XPath。
绝对路径用 - / 单斜杠
相对路径用 - // 双斜杠

ID,类,名称也能够用于XPath :
//input[@name=’q’]
//input[@id=’lst-ib’]
//input[@class=’ lst’]

若是id / name / class的一部分是常量 :
//input[contains(@id,’lst-ib’)

问题15:什么是Selenium的CSS定位器策略?用例子来解释。

CSS位置策略能够与Selenium一块儿使用来定位元素,它使用CSS定位方法,其中 -
绝对路径用 - (空格符号)
相对路径用 - >表示

ID,类,名称也能够用于XPath:
css=input[name=’q’]
css=input[id=’lst-ib’] or input#lst-ib
css=input[class=’lst’] or input.lst

若是id / name / class只有一部分是常量:
css=input[id*=’lst-ib’)]

使用内部文本的元素位置策略:
css = a:contains(‘log out’)

问题16:在处理多个弹出窗口的机制是什么?

可使用命令getWindowHandles()来处理多个弹出窗口。
而后将全部窗口名称存储到Set变量中并将其转换为数组。
接下来,经过使用数组索引,导航到特定的窗口。
driver.switchTo().window(ArrayIndex);

问题17:你如何处理使用Selenium的Ajax控件?

来看一个例子。假如一个文本框是一个Ajax控件,当咱们输入一些文本时,它会显示自动建议的值。
处理这样的控件,须要在文本框中输入值以后,捕获字符串中的全部建议值;而后,分割字符串,取值就行了。

问题18:Selenium Webdriver优于Selenium RC的优势是什么?

Selenium RC的架构至关复杂,WebDriver的架构比Selenium RC简单些。
Selenium RC比较慢,由于它使用了另一个名为Selenium Core的JavaScript程序。相反,WebDriver比Selenium RC更快,由于它直接与浏览器对话,并使用浏览器本身的引擎来进行控制。

像其余JavaScript代码同样,Selenium Core能够访问禁用的元素。Webdriver以更现实的方式与页面元素进行交互。
Selenium RC的API集已经有所改进,可是仍有常常让人困惑的冗余部分。WebDriver API更简单,不包含任何冗余或混淆的命令。
Selenium RC没法支持无头HtmlUnit浏览器。它须要一个真正的、可见的浏览器来操做。Web Driver能够支持无头HtmlUnit浏览器。
Selenium RC内置了测试结果生成器,并自动生成测试结果的HTML文件。Web驱动程序没有自动生成测试结果文件的内置命令。

问题19:“GET”和“NAVIGATE”方法的主要区别是什么?

Get方法能得到一个页面进行加载、或获取页面源代码、或获取文本,就这三。而Navigate将经过刷新,回退,前进的方式导航。

Partial Link Text.部分连接文本这能够经过调用< navigate()>方法来实现。
driver.get() 方法会等到整个页面被加载后才能够,而driver.navigate()只是重定向到该网页,并不会等待。

问题20:隐式等待与显式等待有什么不一样?

隐式等待是设置的全局等待,分为一、页面加载超时等待 ;二、页面元素加载超时;三、异步脚本超时。若是是页面元素超时,设置等待时间,是对页面中的全部元素设置加载时间。隐式等待是其实能够理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到相关元素或者时间结束。

显式等待只是用于特定搜索的一个计时器。它的可扩展性更强,你能够设置它来等待任何条件。一般状况下,可使用一些预先构建的条件来等待元素变得可点击,可见,不可见等,或者只是编写适合需求的条件。

问题21:如何解决IE中的SSL认证问题?

// 打开浏览器后添加下面的命令
driver.navigate().to(“javascript:document.getElementById(‘overridelink’).click()”);

问题22:如何处理WebDriver中的AJAX控件?

AJAX表明异步JavaScript和XML。它不依赖于建立有效的XML所需的打开和关闭标签的额外开销。大部分时间WebDriver自动处理Ajax控件和调用。若是不能处理的话,能够按照下面的方式来处理。

//Waiting for Ajax Control

WebElement AjaxElement = (new WebDriverWait(driver,

10)).until(ExpectedConditions.presenceOfElementLocated(By.("")));

问题23:如何在标题菜单的子菜单项上执行鼠标移动操做?

应该首先移动菜单标题,而后移至弹出菜单项并单击它。不要忘记在最后调用actions.perform() 。

问题24:什么是数据驱动框架?它与关键字驱动框架有什么不一样?

数据驱动框架。
在这个框架中,测试用例逻辑驻留在测试脚本中。测试数据被分离并保存在测试脚本以外。测试数据是从外部文件(Excel文件)中读取的,并被加载到测试脚本中的变量中。变量用于输入值和验证值。
关键字驱动。
关键字/表驱动框架须要开发数据表和关键字。它们独立于执行它们的测试自动化工具。可使用或不使用应用程序来设计测试。在关键字驱动的测试中,被测试的应用程序的功能记录在一个表格中,以及每一个测试的分步说明。

问题25:解释使用TestNG而不是JUnit框架的好处?

TestNG相较于Junit的优点:
在JUnit中,咱们必须声明@BeforeClass和@AfterClass,这是JUnit中的一个约束,而在TestNG中没有像这样的约束。
TestNG提供了更多的setUp / tearDown级别。
1.@ Before/AfterSuite 2.@Before/AfterTest 3.@Before/AfterGroup
TestNG中不须要扩展任何类。
TestNG中没有方法名称约束,就像JUnit同样。
在TestNG中,咱们能够告诉测试一个方法依赖于另外一个方法,而在JUnit中这是不可能的。

测试用例的分组在TestNG中可用,而JUnit中则不可用。执行能够基于组完成。例如,若是你已经定义了许多案例,并经过将2个组分别定义为“离职“与”回归”隔离。若是你只是想执行“理智”的状况,那就告诉TestNG执行“理智”。TestNG将自动执行属于“离职”组的案例。

另外,TestNG支持并行测试用例执行。

问题26:与@Test注释相关的TestNG参数的目的是什么?

在TestNG中,参数是修改注释功能的关键字。

问题27:可使用TestNG运行一组测试用例吗?

是的,TestNG框架支持在测试组的帮助下执行多个测试用例。
它提供了如下选项来运行特定组中的测试用例。
若是想基于回归测试或冒烟测试等其中一个组来执行测试用例,那么:
@Test(groups = {“regression-tests”, “smoke-tests”})

写在最后:

在这里推荐一个我本身建立的软件测试交流群,QQ:642830685,群中会不按期的分享软件测试面试题,软件测试资源,测试资讯,你们能够在群中积极交流技术,还有大佬为你答疑解惑。

风里雨里,我在群中等你。