⾃动化测试Selenium最新⾯试题和对应答案!
问题1:Selenium是什么,流⾏的版本有哪些?
Selenium是基于Web的最流⾏的UI⾃动化测试⼯具。它提供了⼀组⽀持多种平台的公开API(例如Linux,Windows,Mac OS X等)。此外,像Google Chrome,Mozilla Firefox,Internet Explorer和Safari等所有现代浏览器都可以⽤来运⾏Selenium测试。它也涵盖了Android平台,其中Appium是实现Selenium Webdriver界⾯的⼯具,⽤于移动⾃动化。
值得注意的是,除了许多后来的⼩型版本之外,硒还有三个主要版本:
Selenium 1.0或Selenium RC,于2004年初发布,提供了⼀个使⽤服务器与浏览器交换命令和响应的API集。
Selenium 2.0或Selenium Webdriver,在2011年中推出,并在Selenium功能中引⼊了⼀系列重⼤改进。这些新的API完全取代了服务器组件,并与⽬标浏览器本地交互。
Selenium 3.0,这个版本是在2016年末发布的⼤版本。它带来的主要变化是引⼊Webdriver API的W3C规范,⽤于浏览器⾃动化。也就是说,每个主要的浏览器都会有⾃⼰的Webdriver API来实现功能。
问题2:你如何从命令⾏启动Selenium RC?
// 简单的启动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对象来做以下事情:
可以连接到由字符串URL表⽰的数据库的驱动程序。每当调⽤getConnection()
getConnection()⽅法时,DriverManager类都会检查可以连接到URL中指定的数据库的所有已注册的Driver类的列表。
句法:
String url = "jdbc: odbc: makeConnection";
Connection con = Connection(url, "userID", "password");
问题6:Selenium RC中定位器⽅法有哪些?
1. ID
2. Name
3. CSS (Cascade Stylesheet)
4. XPATH (Relative XPath and Absolute XPath)
5. Dom
问题7:你如何验证多个页⾯上存在的⼀个对象?
可以使⽤下⾯的Selenium命令来检查:
assertTrue(selenium.isElementPresent(locator));
问题8:XPath中使⽤单斜杠和双斜杠有什么区别?
例如 “/ html / body / p”匹配所有的段落元素。
例如
例如 “// p”匹配所有的段落元素。
例如
问题9:如何编写Selenium IDE / RC的⽤户扩展?
⽤户扩展(UX)存储在Selenium IDE或Selenium RC⽤来激活扩展的单独⽂件中。它包含⽤JavaScript编写的函数定义。
因为Selenium的核⼼是⽤JavaScript开发的,所以要符合原语⾔的标准规则来创建扩展。要创建⼀个扩展,我们必须⽤下⾯的设计格式来编写函数。
// 样例
Selenium.prototype.doFunctionName = function(){
selenium怎么使用}
函数名称前⾯的“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 :
如果id / name / class的⼀部分是常量 :
问题15:什么是Selenium的CSS定位器策略?⽤例⼦来解释。
CSS位置策略可以与Selenium⼀起使⽤来定位元素,它使⽤CSS定位⽅法,其中 -
绝对路径⽤ - (空格符号)
相对路径⽤ - >表⽰
ID,类,名称也可以⽤于XPath:
如果id / name / class只有⼀部分是常量:
使⽤内部⽂本的元素位置策略:
问题16:当有很多定位器时,如ID、名称、XPath、CSS定位器,我应该使⽤哪⼀个?
如果有唯⼀的名称或标识符可⽤,那么应该使⽤它们来代替XPath和CSS定位器。如果没有,那么CSS定位器应该被优先考虑,因为在⼤多数现代浏览器中,它们的评估速度⽐XPath更快。
问题17:在硒中处理多个弹出窗⼝的机制是什么?
getWindowHandles()来处理多个弹出窗⼝。
可以使⽤命令getWindowHandles()
Set变量中并将其转换为数组。
然后将所有窗⼝名称存储到Set
接下来,通过使⽤数组索引,导航到特定的窗⼝。
driver.switchTo().window(ArrayIndex);
问题18:你如何处理使⽤Selenium的Ajax控件?
来看⼀个例⼦。假如⼀个⽂本框是⼀个Ajax控件,当我们输⼊⼀些⽂本时,它会显⽰⾃动建议的值。
处理这样的控件,需要在⽂本框中输⼊值之后,捕获字符串中的所有建议值;然后,分割字符串,取值就好了。
Part2. WebDriver相关⾯试问题和答案
问题19:Selenium Webdriver优于Selenium RC的优点是什么?
Selenium RC的架构相当复杂,WebDriver的架构⽐Selenium RC简单些。
问题20:“GET”和“NAVIGATE”⽅法的主要区别是什么?
Get⽅法能获得⼀个页⾯进⾏加载、或获取页⾯源代码、或获取⽂本,就这三。⽽Navigate将通过刷新,回退,前进的⽅式导航。
例如 -如果我们想要前进,并做⼀些功能,并返回到主页。
例如 -
< navigate()>⽅法来实现。
这可以通过调⽤< navigate()>
<() ⽅法会等到整个页⾯被加载后才可以,⽽driver.navigate()
driver.navigate()只是重定向到该⽹页,并不会等待。
<()
问题21:隐式等待与显式等待有什么不同?
隐式等待是设置的全局等待,分为1、页⾯加载超时等待 ;2、页⾯元素加载超时;3、异步脚本超时。如果是页⾯元素超时,设置等待时间,是对页⾯中的所隐式等待
有元素设置加载时间。隐式等待是其实可以理解成在规定的时间范围内,浏览器在不停的刷新页⾯,直到到相关元素或者时间结束。
显式等待只是⽤于特定搜索的⼀个计时器。它的可扩展性更强,你可以设置它来等待任何条件。通常
情况下,可以使⽤⼀些预先构建的条件来等待元素变得可显式等待
点击,可见,不可见等,或者只是编写适合需求的条件。
问题22:你将如何处理Selenium WebDriver中的警报/弹出窗⼝?
有两种类型的警报通常被引⽤。
基于Web的警报弹出窗⼝。
1. WebDriver为⽤户提供了⼀种使⽤Alert界⾯处理这些弹出窗⼝的⾮常有效的⽅法。
2. void dismiss() - ⼀旦出现弹出窗⼝,dismiss()⽅法就会点击“Cancel”按钮。
3. void accept() - 只要弹出窗⼝出现,accept()⽅法就会点击“Ok”按钮。
4. String getText() - getText()⽅法返回警告框中显⽰的⽂本。
5. void sendKeys(String stringToSend) - sendKeys()⽅法将指定的字符串模式输⼊到警告框中。
基于Windows的警报弹出窗⼝。
处理基于windows的弹出窗⼝总是有点棘⼿,因为我们知道Selenium是⼀个⾃动化测试⼯具,它只⽀持Web应⽤程序测试,也就是说,它不⽀持基于Windows的应⽤程序,窗⼝警报就是其中之⼀。
1. Robot class是基于Java的实⽤程序,它模拟键盘和⿏标操作,并可以有效地⽤于处理基于windows的弹出与键盘事件的帮助。
2. KeyPress和KkeyRelease⽅法可以分别模拟⽤户按下和释放键盘上某个键的操作。
问题23:如何使⽤Selenium WebDriver截图?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论