下面的Java Selenium问题指南涵盖了100个最重要的Selenium自动化面试问题,包括简单的Selenium Java面试问题以及带答案的Selenium自动化测试面试问题。本文包含了面向新同学的所有Selenium基本问题,以及针对有经验的应聘者的Selenium面试问题和答案,帮助面试者做准备。
什么是Selenium?Selenium是由什么组成的?
什么是Selenium 2.0?
什么是Selenium 3.0?
如何找到使用Selenium的元素?
列出Selenium支持的测试类型?
解释什么是Selenium中的断言,以及断言的类型是什么?
X-PATH的用途是什么?
解释一下单劈开和双劈开在XPath上的区别?
列出使用Selenium所面临的技术挑战?
键盘输入和键盘命令有什么不同?
Selenium是一套用于自动化Web测试的工具。它由以下几个部分组成
Selenium IDE(集成开发环境)它是一个录制和回放的工具,它是一个Firefox插件
Webdriver和RC:它提供各种语言的API,比如Java、.NET、PHP等。大多数浏览器都可以使用Webdriver和RC。
在Selenium 2.0中,Web测试工具Selenium RC和WebDriver被整合到单个工具中
什么是Selenium 2.0
Selenium 3.0是Selenium的最新版本。它已经发布了Selenium 3.0的两个测试版,几乎没有以下变化:
以下是Selenium 3.0中添加的几个新功能
在Selenium中,网页中的每个对象或控件都被称为元素,在网页中查找元素有不同的方法,它们是
ID号
名字
标签
属性
CSS
链接文本
PartialLink文本
XPath等
对于基于Web的应用程序测试,可以使用Selenium
可以支持的测试类型有
a)功能测试,了解有关功能测试的更多信息。
b)数据回归
对于发布后的持续集成验证,可以使用自动化工具
a)Jenkins
b)Hudson
c)Quick Build
d)-CruiseCont
断言被用作重要的验证点。它验证断言类型的状态是否为“Assert”、“Verify”和“waitFor”。
X-PATH用于在网页中查找WebElement。它在标识动态元素时也很有用。
单曲劈开‘/’
单劈开(/)从单据节点开始选择
它允许创建‘绝对’路径表达式
双劈开‘//’
双劈开(//)开始选择匹配文档中的任意位置
它允许创建“相对”路径表达式
Selenium的技术挑战是
Selenium仅支持基于Web的应用程序
它不支持位图比较
与HP UFT等商业工具相比,没有供应商对工具的支持
由于Selenium中没有对象存储库的概念,使得对象的可维护性变得很困难
typeKeys() 将触发JavaScript事件,而 .type() 不会。Type 使用JavaScript语言填充Value属性,而 .typekeys() 类似于实际的用户输入
Assert:Assert允许检查元素是否在页面上。测试换句话说,测试将在检查失败的点终止。
VERIFY:VERIFY命令将检查元素是否在页面上,如果不在,则测试将继续执行。*在验证中,即使有任何测试失败,所有命令都将保证运行。
在Java中,可以将一种特殊形式的语法元数据添加到Java源代码中,这称为注解。
Test
Before
After
Ignore
BeforeClass
AfterClass
RunWith
要单击元素的特定部分,需要使用clickAt命令。ClickAt命令接受元素定位器和x,y坐标作为参数-clickAt(locator,cordString)
它支持C#、PHP、Java、Perl、Phython
它支持不同的操作系统,如Windows、Linux和Mac OS
它有强大的方法来定位元素(XPath、DOM、CSS)
它拥有由谷歌支持的高度开发者社区
Selenium比qtp更受欢迎,因为
Selenium是开放源码的,而qtp是商业工具。
Selenium专门用于测试基于Web的应用程序,而QTP也可用于测试客户端服务器应用程序
Selenium在Windows、Mac、Linux等操作系统上支持Firefox、IE、Opera、Safari等,而QTP仅限于Windows上的Internet Explorer。
Selenium支持许多编程语言,如Ruby、Perl、Python,而QTP仅支持VB脚本
必须在Selenium中传递的四个参数是
主机
端口号
浏览器
URL
两者都会延迟执行的速度。
如果使用的是速度较慢的Web应用程序,这个命令非常有用
“同源策略”是出于安全原因而引入的,它确保网站的内容永远不会被来自另一个网站的脚本访问。*根据该策略,浏览器中加载的任何代码只能在该网站的域内运行。
为了避免使用“同源策略”代理注入方法,在代理注入模式下,Selenium Server充当客户端配置的HTTP代理,该代理位于浏览器和被测应用程序之间,然后将AUT屏蔽在一个虚构的URL下
提升权限的目的类似于代理注入,允许网站做一些通常不允许的事情,通过使用这些浏览器模式,Selenium Core可以直接打开AUT,也可以读/写其内容,而不需要通过Selenium RC服务器传递整个AUT。
可以在元素上使用“submit”方法提交表单-
或者,也可以在构成的元素上使用单击方法
TestNG是一个基于JUnit和NUnit的测试框架,用于简化从单元测试到集成测试的广泛测试需求。而使其成为高效测试框架的功能是
支持注解
支持数据驱动测试
灵活的测试配置
能够重新执行失败的测试用例
显式等待:它是一次性的,用于特定的搜索。
这将返回frame列表。
将需要切换到每一frame和搜索我们想要的定位器。
findElement()
它使用给定的“定位机制”查找当前页面中的第一个元素。
findElements()使用给定的“定位机制”查找当前页面中的所有元素。
与Selenium链接的JUnits注解包括
@Before public void method() -每次测试前都会执行Method(),该方法可以准备测试
@Test public void method() -@Test标识该方法为测试方法环境
@After public void method() -要在使用此注解之前执行方法,测试方法必须以@BEFORE开头
Datadriven框架:在这个框架中,测试数据被分离并保存在测试脚本之外,而测试用例逻辑驻留在测试脚本中。测试数据从外部文件(Excel文件)中读取并加载到变量中,变量用于输入值和验证值。
关键字驱动框架:关键字驱动框架需要开发独立于测试自动化的数据表和关键字。在关键字驱动测试中,被测应用程序的功能记录在表格中,并为每项测试提供逐步说明。
使用url传递用户名和密码
//从元素获取测试并存储在文本变量中
//断言预期的文本
对象存储库是任何UI自动化中必不可少的实体,它允许测试人员将脚本中使用的所有对象存储在一个或多个集中位置,而不是分散在测试脚本中。
Selenium Grid将测试发送到集线器。这些测试被重定向到Selenium Webdriver,它启动整个测试套件,允许并行运行测试。
是。但不如LoadRunner这样的专用性能测试工具有效。
如果使用Selenium-WebDriver,则不需要Selenium Server,因为它使用完全不同的技术
Selenium Server提供Selenium RC功能,该功能用于Selenium 1.0向后兼容
Selenium Web Driver使用每个浏览器的本地支持直接调用浏览器以实现自动化,而Selenium RC需要Selenium服务器将Javascript注入浏览器
当需要以下方面的改进支持时,应使用WebDriver
处理多个框架、弹出窗口、多个浏览器窗口和告警
页面导航和拖放
基于Ajax的UI元素
多浏览器测试,包括Selenium 1.0不能很好支持的浏览器改进功能
注入功能的主要限制是“findElement”命令可能无法按预期工作。
要使用Selenium Web驱动程序在页面中查找损坏的图像,执行以下操作
获取XPath并使用标记名获取页面中的所有链接
在页面中,单击每个链接
在目标页面标题中查找404/500
要处理Web驱动程序中的颜色,可以使用
使用 getCssValue(arg0) 函数通过将‘color’字符串作为参数发送来获取颜色
可以使用以下命令来存储使用Web驱动程序的文本框形式的值
数字:它根据其(从零开始的)索引选择Frame
名称或ID:按名称或ID选择框架
先前找到的WebElement:使用其先前定位的WebElement选择框架
在Selenium Web驱动程序中有5个不同的异常,它们是
WebDriverException
NoAlertPresentException
NoSuchWindowException
NoSuchElementException
TimeoutException
可以使用以下命令执行双击操作
可以使用type命令在上传文件的文件输入框中键入。然后,使用Java中的“Robot”类来实现文件上传。
要在HTML框架上引入控件,可以使用“switchTo”框架方法-
要指定frame,可以使用索引号
这将在名为-“frame Name”的4个frame上带来控制 子框架名称“parentFrame”
getwindowhandles() :用于获取所有打开浏览器的地址,返回类型设置为<String>
getwindowhandle() :获取控件所在的当前浏览器地址,返回类型为字符串
要使用方法 defaultContent() 从frame切换回来,执行以下操作
不同类型的定位器有
为了显示常量字符串,可以使用命令echo<常量字符串>
如果要显示变量的值,可以使用诸如echo${Variable Name}这样的命令
恢复方案取决于使用的编程语言。如果正在使用Selenium WebDriver Java测试中的“try catch”
要遍历测试脚本中的选项,可以循环使用编程语言的功能,例如,要在文本框中键入不同的测试数据,可以使用Java中的“for”循环
//数组中的测试数据采集
string[]testData={“test1”,“test2”,“test3”};
//遍历每个测试数据
有三种方法
Junit:在Ant的帮助下
使用我们自己的自定义报告,使用XSL JAR将XML内容转换为HTML
创建html测试报告有三种方式
JUnit:在Ant的帮助下
使用我们自己的自定义报告,使用XSL JAR将XML内容转换为HTML
在Selenium IDE中插入断点
右键单击Selenium IDE中的命令,选择“切换断点”
按键盘上的“B”键,然后在Selenium IDE中选择命令
在Selenium IDE中可以设置多个断点
从要逐步执行测试的位置插入断点
运行测试用例
在给定的断点处,执行将暂停
要继续下一条语句,单击蓝色按钮
单击“Run”(运行)按钮,一次继续执行所有命令
Selenese是用于运行测试的Selenium命令集
有三种类型的Selenese
Actions:用于执行与目标元素的操作和交互
Assertions(断言点):用作检查点
Accessors(访问器)用于存储变量中的值
Selenium IDE的局限性
不存在异常处理
Selenium IDE仅使用HTML语言
使用IDE无法读取外部数据库
无法从.txt、.xls等外部文件读取
不能像IF、ELSE、SELECT语句那样执行条件语句或分支语句
Selenium IDE既可以作为弹出窗口打开,也可以在侧栏中打开
在Selenium中,主要使用4个定位器
X-path locators
Css locators
Html id
Html name
在Selenium IDE中,可以使用Java脚本生成随机数
type
css=input#s
And for
type
css=input#s
javascript{new Date()}
可以使用Selenium IDE的Format选项将测试转换为另一种编程语言
可以使用“storeTable”命令
示例存储来自html表的单元格0,2的文本
storeTable
Css=#table 0.2
textFromCell
当定位器已更改且Selenium IDE无法找到元素时
当网页上没有出现等待访问的Element Selenium IDE且操作超时时
当元素Selenium IDE尝试访问时,未创建
从要逐步执行的位置插入断点
运行测试用例
在给定的断点处,执行将暂停
要继续执行下一步,单击蓝色按钮
要一次运行命令,单击运行按钮
在Selenium IDE中,可以通过两种方式执行单行命令
右键单击Selenium IDE中的命令,选择“Execute this command”(执行此命令
在Selenium IDE中选择命令后,按键盘上的“X”键
在Selenium中,IDE源代码视图以XML格式显示脚本
可以通过两种方式设置Selenium IDE
按键盘上的“S”键,然后在Selenium IDE中选择命令
在Seleniun IDE中,右键单击命令并选择“Set/Clear Start Point”(设置/清除起始点)
要测试可以使用Selenium IDE的“查找按钮”的定位器,当单击它时,将在屏幕上看到一个高亮显示的元素,前提是元素定位器是正确的,否则将显示一条错误消息
正则表达式是用于描述搜索模式的特殊文本字符串。在Selenium IDE中,正则表达式可以与关键字-regexp:一起使用,作为值的前缀,需要为期望值包括模式。
如果想“扩展”Selenium函数库提供的默认功能,可以创建一个Core扩展。甚至可以下载由其他Selenium爱好者创建的现成的Core扩展。
可以使用命令selectWindow在窗口之间切换。此命令使用Windows的标题来标识要切换到哪个窗口。
可以使用verifyElementPositionLeft&verifyElementPositionTop。它分别从页面左侧和顶部对元素的位置进行像素比较
可以使用storeAlert命令,该命令将获取告警弹出消息并将其存储在变量中。
Selenium IDE在浏览器支持和语言支持方面存在限制。通过使用Selenium,可以降低RC的限制。
在不同的平台和用于自动化Web应用程序的不同Web浏览器上,Selenium RC与Java、C#、Perl、Python等语言一起使用
Selenium RC是基于Java的,可以使用任何可以与Web应用程序交互的语言
使用服务器,可以绕过该限制并运行针对任何Web应用程序运行的自动化脚本
Selenium IDE很多功能不直接支持,比如条件语句、迭代、测试结果的记录和报告、意外错误处理等等,因为IDE只支持HTML语言,所以使用Selenium RC来处理这些问题,因为它支持Perl、Ruby、Python、PHP等语言,使用这些语言我们可以编写程序来实现IDE问题。
Selenium RC和WebDriver的主要区别在于,Selenium RC在加载页面时将javascript函数注入浏览器。另一方面,Selenium Webdriver使用内置支持的浏览器驱动
RC的优势在于
可以从.xls、.txt等读取数据或将数据写入.xls、.txt等
它可以处理动态对象和基于AJAX的UI元素
可以使用循环和条件来获得更好的性能和灵活性
支持多种编程语言和操作系统
对于任何启用Java脚本的浏览器,都可以使用Selenium RC
库和类的集合称为Framework,当测试人员必须自动化测试用例时,它们非常有用。NUnit、JUnit、TestNG、Bromine、RSpec、unittest是RC中可用的一些框架。
为了在RC中处理弹出窗口,使用selectWindow方法选择弹出窗口,windowFocus方法让控件从当前窗口变为弹出窗口,并根据脚本执行操作
除了来自js的“同源策略”限制外,Selenium还受到限制,不能执行浏览器之外的任何内容。
可以,当不使用Java测试框架时也是可以的。如果使用的是“parallel=test”属性,可以将测试设置为并行执行,并且可以定义两个不同的测试,每个测试使用不同的浏览器,而不是使用Java测试框架。
如果希望针对不同的服务器和客户端平台实现完全自动化,那么需要一种从命令行进程调用测试的方法,报告可以告诉发生了什么,并且可以灵活地创建测试套件。TestNG提供了这种灵活性。
要捕获Selenium Server中的服务器端日志,可以使用命令
要在文本框中输入值,可以使用命令 sendkeys()
要使用Selenium标识对象,可以使用
isElementPresent(String locator)
isElementPresent采用定位器作为参数,如果找到,则返回布尔值
断点:当在代码中实现断点时,执行将立即停止。这有助于验证代码是否按预期工作。
起始点:Startpoint指示应该开始执行的点。当想要从代码中间或断点运行测试脚本时,可以使用Startpoint。
与Java相比,Python更适合与Selenium一起使用的几点是,
与Python程序相比,Java程序的运行速度往往较慢。
Java使用传统的大括号开始和结束块,而Python使用缩进。
JAVA使用静态类型,而Python是动态类型的。
与Java相比,Python更简单、更紧凑。
在Selenium Webdriver中处理Ajax调用所面临的挑战包括
使用“暂停”命令处理AJAX调用并不完全可靠。取而代之的是,“waitfordition”在测试Ajax应用程序时会更有帮助。
给予开发人员修改Ajax应用程序的完全自由使得测试过程具有挑战性
创建自动测试求对于测试工具来说可能很困难,因为这样的Ajax应用程序通常使用不同的编码或序列化技术来提交POST数据。
IntelliJ是一种IDE,可以帮助为Selenium编写更好、更快的代码。IntelliJ可以用在Java bean和Eclipse的选项中。
可以通过两种方式自定义TestNG报告。
使用ITestListener接口
使用iReporter界面
要生成pdf报告,需要Java API IText。
在Selenium WebDriver中,监听者“监听”Selenium脚本中定义的事件并相应地进行操作。Webdriver侦听器和TestN监听器。
TestNG中的监听器类型是,
IAnnotationTransformer
IAnnotationTransformer2
IConfigurable
IConfigurationListener
IExecutionListener
IHookable
IInvokedMethodListener
IInvokedMethodListener2
IMethodInterceptor
IReporter
ISuiteListener
ITestListener
期望的功能是存储浏览器属性(如浏览器名称、浏览器版本、浏览器驱动程序在系统中的路径等)的一系列键/值对,以确定浏览器在运行时的行为。
对于Selenium来说,
可以用来配置Selenium WebDriver的驱动实例。
当想要在具有不同操作系统和版本的不同浏览器上运行测试用例时。
对于Selenium Webdriver中的数据库测试,需要JDBC(Java Database Connectivity,Java数据库连接)API。它允许执行SQL语句。
Selenium设计用于在不同的浏览器上自动运行基于Web的应用程序。但是处理无GUI或者非HTML的弹出窗的时候需要AutoIT。
在使用Selenium时,需要会话处理。这是因为,在测试执行期间,Selenium WebDriver必须与之交互,因此要避免这种情况,需要进行会话处理。
使用Git Hub进行Selenium检测的优势在于
多人在处理同一项目时,可以同时更新项目详细信息并通知其他团队成员。
Jenkins可以帮助定期从远程存储库构建项目。这有助于跟踪失败的构建。