2024年最全自动化测试Selenium最新面试题和对应答案!_selenium自动答题,12年高级工程师的“飞升之路”



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
问题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 (Cascade Stylesheet)
- XPATH (Relative XPath and Absolute 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:当有很多定位器时,如ID、名称、XPath、CSS定位器,我应该使用哪一个?
如果有唯一的名称或标识符可用,那么应该使用它们来代替XPath和CSS定位器。如果没有,那么CSS定位器应该被优先考虑,因为在大多数现代浏览器中,它们的评估速度比XPath更快。
问题17:在硒中处理多个弹出窗口的机制是什么?
可以使用命令getWindowHandles()来处理多个弹出窗口。
然后将所有窗口名称存储到Set变量中并将其转换为数组。
接下来,通过使用数组索引,导航到特定的窗口。
driver.switchTo().window(ArrayIndex);
问题18:你如何处理使用Selenium的Ajax控件?
来看一个例子。假如一个文本框是一个Ajax控件,当我们输入一些文本时,它会显示自动建议的值。
处理这样的控件,需要在文本框中输入值之后,捕获字符串中的所有建议值;然后,分割字符串,取值就好了。
Part2. WebDriver相关面试问题和答案
问题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将通过刷新,回退,前进的方式导航。
例如 -如果我们想要前进,并做一些功能,并返回到主页。
这可以通过调用< navigate()>方法来实现。
driver.get() 方法会等到整个页面被加载后才可以,而driver.navigate()只是重定向到该网页,并不会等待。
问题21:隐式等待与显式等待有什么不同?
隐式等待是设置的全局等待,分为1、页面加载超时等待 ;2、页面元素加载超时;3、异步脚本超时。如果是页面元素超时,设置等待时间,是对页面中的所有元素设置加载时间。隐式等待是其实可以理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到相关元素或者时间结束。
显式等待只是用于特定搜索的一个计时器。它的可扩展性更强,你可以设置它来等待任何条件。通常情况下,可以使用一些预先构建的条件来等待元素变得可点击,可见,不可见等,或者只是编写适合需求的条件。
问题22:你将如何处理Selenium WebDriver中的警报/弹出窗口?
有两种类型的警报通常被引用。
- 基于Windows的警报弹出窗口
- 基于Web的警报弹出窗口
基于Web的警报弹出窗口。
- WebDriver为用户提供了一种使用Alert界面处理这些弹出窗口的非常有效的方法。
- void dismiss() - 一旦出现弹出窗口,dismiss()方法就会点击“Cancel”按钮。
- void accept() - 只要弹出窗口出现,accept()方法就会点击“Ok”按钮。
- String getText() - getText()方法返回警告框中显示的文本。
- void sendKeys(String stringToSend) - sendKeys()方法将指定的字符串模式输入到警告框中。
基于Windows的警报弹出窗口。
处理基于windows的弹出窗口总是有点棘手,因为我们知道Selenium是一个自动化测试工具,它只支持Web应用程序测试,也就是说,它不支持基于Windows的应用程序,窗口警报就是其中之一。
- Robot class是基于Java的实用程序,它模拟键盘和鼠标操作,并可以有效地用于处理基于windows的弹出与键盘事件的帮助。
- KeyPress和KkeyRelease方法可以分别模拟用户按下和释放键盘上某个键的操作。
问题23:如何使用Selenium WebDriver截图?

问题24:如何在WebDriver/如何管理HTTPS中的安全连接错误中解决Firefox中的SSL证书问题?



网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
[外链图片转存中…(img-q140Ar3n-1715138700314)]
[外链图片转存中…(img-qRxViVnR-1715138700314)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
更多推荐



所有评论(0)