⾃动化测试⾯试题及答案⼤全(2)
问题1:Selenium是什么,流⾏的版本有哪些?
是⼀个开源的web⾃动化测试的框架,⽀持多种编程语⾔,⽀持跨浏览器平台进⾏测试。
Selenium 1.0或Selenium RC
Selenium 2.0或Selenium Webdriver
Selenium 3.0
问题2:你如何从命令⾏启动Selenium RC?
java -jar selenium-server.jar
// 在浏览器中运⾏⼀套Selenese脚本
java -jar selenium-server.jar -htmlSuite
问题3:在我的机器端⼝4444不是免费的。我怎样才能使⽤另⼀个端⼝?
/
/你可以在运⾏selenium服务器时指定端⼝为 -
Java -jar selenium-server.jar -port 5555
问题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就可以收集有关数据库或数据源的信息。
selenium怎么使用可以帮助我们关闭数据源。Connection.isClosed() ⽅法只有在调⽤了Connection.close()时才返回true 。此⽅法⽤于关闭所有连接。
⾸先我们需要通过使⽤Connection()⽅法,建⽴与数据库的连接。这个⽅法接受⼀个包含URL的字符串。DriverManager类尝试查可以连接到由字符串URL表⽰的数据库的驱动程序。每当调⽤getConnection()⽅法时,DriverManager类都会检查可以连接到URL中指定的数据库的所有已注册的Driver类的列表。
句法:
String url = “jdbc: odbc: makeConnection”;
Connection con = Connection(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’)
问题17:在处理多个弹出窗⼝的机制是什么?
可以使⽤命令getWindowHandles()来处理多个弹出窗⼝。
然后将所有窗⼝名称存储到Set变量中并将其转换为数组。
接下来,通过使⽤数组索引,导航到特定的窗⼝。
driver.switchTo().window(ArrayIndex);
问题18:你如何处理使⽤Selenium的Ajax控件?
来看⼀个例⼦。假如⼀个⽂本框是⼀个Ajax控件,当我们输⼊⼀些⽂本时,它会显⽰⾃动建议的值。
处理这样的控件,需要在⽂本框中输⼊值之后,捕获字符串中的所有建议值;然后,分割字符串,取值就好了。
问题19: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驱动程序没有⾃动⽣成测试结果⽂件的内置命令。
问题20:“GET”和“NAVIGATE”⽅法的主要区别是什么?
Get⽅法能获得⼀个页⾯进⾏加载、或获取页⾯源代码、或获取⽂本,就这三。⽽Navigate将通过刷新,回退,前进的⽅式导航。
Partial Link Text.部分链接⽂本这可以通过调⽤< navigate()>⽅法来实现。
<() ⽅法会等到整个页⾯被加载后才可以,⽽driver.navigate()只是重定向到该⽹页,并不会等待。
问题21:隐式等待与显式等待有什么不同?
隐式等待是设置的全局等待,分为1、页⾯加载超时等待 ;2、页⾯元素加载超时;3、异步脚本超时。如果是页⾯元素超时,设置等待时间,是对页⾯中的所有元素设置加载时间。隐式等待是其实可以理解成在规定的时间范围内,浏览器在不停的刷新页⾯,直到到相关元素或者时间结束。
显式等待只是⽤于特定搜索的⼀个计时器。它的可扩展性更强,你可以设置它来等待任何条件。通常情况下,可以使⽤⼀些预先构建的条件来等待元素变得可点击,可见,不可见等,或者只是编写适合需求的条件。
问题22:如何解决IE中的SSL认证问题?
// 打开浏览器后添加下⾯的命令
driver.navigate().to(“ElementById(‘overridelink’).click()”);
问题23:如何处理WebDriver中的AJAX控件?
AJAX代表异步JavaScript和XML。它不依赖于创建有效的XML所需的打开和关闭标签的额外开销。⼤部分时间WebDriver⾃动处理Ajax 控件和调⽤。如果不能处理的话,可以按照下⾯的⽅式来处理。
//Waiting for Ajax Control
WebElement AjaxElement = (new WebDriverWait(driver,
10)).until(ExpectedConditions.presenceOfElementLocated(By.("")));
问题24:如何在标题菜单的⼦菜单项上执⾏⿏标移动操作?
应该⾸先移动菜单标题,然后移⾄弹出菜单项并单击它。不要忘记在最后调⽤actions.perform() 。
问题25:什么是数据驱动框架?它与关键字驱动框架有什么不同?
数据驱动框架。
在这个框架中,测试⽤例逻辑驻留在测试脚本中。测试数据被分离并保存在测试脚本之外。测试数据是从外部⽂件(Excel⽂件)中读取的,并被加载到测试脚本中的变量中。变量⽤于输⼊值和验证值。
关键字驱动。
关键字/表驱动框架需要开发数据表和关键字。它们独⽴于执⾏它们的测试⾃动化⼯具。可以使⽤或不使⽤应⽤程序来设计测试。在关键字驱动的测试中,被测试的应⽤程序的功能记录在⼀个表格中,以及每个测试的分步说明。
问题26:解释使⽤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⽀持并⾏测试⽤例执⾏。
问题27:与@Test注释相关的TestNG参数的⽬的是什么?
在TestNG中,参数是修改注释功能的关键字。
问题28:可以使⽤TestNG运⾏⼀组测试⽤例吗?
是的,TestNG框架⽀持在测试组的帮助下执⾏多个测试⽤例。
它提供了以下选项来运⾏特定组中的测试⽤例。
如果想基于回归测试或冒烟测试等其中⼀个组来执⾏测试⽤例,那么:
@Test(groups = {“regression-tests”, “smoke-tests”})
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论