Selenium是一款基于Web功能测试的自动化测试框架。它的应运而生经历了不同时代,组成了一系列工具集,已然成为了Web功能自动化测试的首选“武器”。
本次主要基于Web功能自动化中常见面试题和大家交流分享。下面涉及到的代码示例以JAVA语言为例,技术点笔试/面试题,共30问,分为上下两个篇章;上篇主要关注于Selenium核心技术点。
笔试/面试中常见技术要点
01 Selenium中有哪些不同类型的定位器?
答:定位器可以看作一个地址,用于在网页中唯一标识一个页面元素,为了准确地识别Web元素,Selenium中有8种不同的定位方式:ID;ClassName;Name;TagName;LinkText;PartialLinkText;Xpath;CSS Selector。
02 什么是XPath?
答:元素定位方式的一种,根据XML路径来定位Web元素,使用XPath定位元素的基本原理是在整个页面的各个元素间进行遍历,从而使用户能根据与当前元素关联的其他元素来确定当前元素的相对/绝对位置。
Xpath中“ /”和“ //”的意义如下:
(1)“ /”: 用于创建具有绝对路径的Xpath,即xpath从文档根节点/起始节点开始;
(2)“ //”: 用于创建具有相对路径的Xpath,即xpath从文档中的任何位置开始(非根节点)。
03 WebDriver启动浏览器的脚本(列举不同类别的浏览器驱动)?
答:以下语法可用于启动浏览器:
WebDriver driver =new FirefoxDriver();
WebDriver driver =new ChromeDriver();
04 WebDriver提供哪些常见类型的驱动程序?
答:WebDriver中常见驱动程序有(这部分建议在面试前查阅一下官网,做到实时同步更新):
· FirefoxDriver
· InternetExplorerDriver
· ChromeDriver
· SafariDriver
· OperaDriver
· AndroidDriver
05 WebDriver中有哪些不同的等待类型?
答:Selenium WebDriver共有两类等待:
(1)隐式等待:在整个测试脚本中,每个连续测试步骤/命令间设置默认等待时间(例 如10秒)。因此,要执行后续测试步骤,需等待前一个测试步骤/命令执行完毕后,再经过10秒时,才能继续下一步。
(2)显式等待:与隐式等待不同,显式等待仅适用于特定实例, 用于中止当前执行,直到满足特定条件的元素出现为止(在允许的时间内)。
06 driver.close() 和driver.quit() 有什么区别?
答:此二者区别如下:
· driver.close() :关闭用户当前正在使用的Web浏览器窗口,即WebDriver当前正在访问的窗口。.close() 方法既不需要任何参数,也无任何返回值;
· driver.quit() :不同于close(),quit()方法用于关闭程序已打开的所有窗口。该方法也不需要任何参数,也无任何返回值。
07 WebDriver可以测试移动应用程序吗?
答:由于WebDriver是基于Web的测试框架,因此无法测试移动应用程序(APP),移动APP测试可以选择Appium。
08 如何使用Selenium输入文本框?
答:使用sendKeys(“XXXXXX”)在文本框中输入字符串,例如:
WebElement username = drv.findElement(By.id(“电子邮件”));
username.sendKeys(“ sth”);
09 如何查找元素是否显示在屏幕上?
答:WebDriver通过isDisplayed(), isSelected(), isEnabled(),这三种方法判断Web元素的可见性,这类方法将返回结果是布尔类型;Web元素可以是按钮,下拉框,复选框,单选按钮,标签等。
(1)isDisplayed():
boolean b1 = driver.findElement(By.id(“XXX”)).isDisplayed();
(2)isSelected():
boolean b2 = driver.findElement(By.id(“XXX”)).isSelected();
(3)isEnabled():
boolean b3 = driver.findElement(By.id(“XXX”)).isEnabled();
10 如何获取Web元素中的文本?
答: Get方法用于获取指定Web元素内部文本,此方法不需要传递任何参数,直接调用即可,它返回的是字符串值。该方法常用于验证页面显示的消息,标签,错误信息等是否和预期匹配。
String Text = driver.findElement(By.id(“XXX”)).getText();
11 如何获取下拉菜单中的值?
答: 通过WebDriver中Select类来选择下拉列表中的值:
(1)通过selectByValue(“XXX”):
Select selectByValue =new Select(driver.findElement(By.id(“某id”)));
selectByValue.selectByValue(“某选项”);
(2)通过selectByVisibleText(“XXX”):
Select selectByVisibleText =new Select (driver.findElement(By.id(“某id”)));
selectByVisibleText.selectByVisibleText(“某选项”);
(3)通过selectByIndex(X):
Select selectByIndex =new Select(driver.findElement(By.id(“某id”)));
selectByIndex.selectByIndex(3);
12 Selenium中页面导航命令有哪些不同类型?
答:Selenium中常见的页面导航操作如下:
(1)navigate().back() – 回上一页,回到Web浏览器历史记录中的上一个网页。
例:driver.navigate().back();
(2)navigate().forward() – 去下一页, 基于浏览器的历史记录导航到下一个网页。
例:driver.navigate().forward();
(3)navigate().refresh() – 刷新当前页面。
例:driver.navigate().refresh();
(4)navigate().to() – 开启新的Web浏览器窗口,并导航到指定的URL。
例:driver.navigate().to(“https://www.atstudy.com/”);
13 如何使用linkText单击超链接?
答:可以通过链接文本的全包含和部分包含来获取该链接的定位 。
(1)通过链接文本找到该元素,单击该元素,用户将被重定向到相应的页面;
driver.findElement(By.linkText(“超链接的内容”)).click();
(2)通过“部分包含链接文本”单击超链接,根据链接子字符串查找元素,找到后单击:
driver.findElement(By.partialLinkText(“部分链接内容”)).click();
注:partialLinkText(“XXX”)用于查找具有指定子字符串的web元素
14 如何处理frame?
答: iframe类似于网页中的嵌套,及一个页面中嵌套多个其他完整的页面;在Selenium中基于iframe的操作如下:
(1)通过id定位iframe
driver.switchTo().frame(“目标frame的id“);
(2)通过tagName定位iframe
driver.switchTo().frame(driver.findElements(By.tagName(“iframe”).get(0));
(3)通过index定位iframe [frame(index)]
driver.switchTo().frame(0);
(4)通过frame的名字定位[frame(Name of Frame)]
driver.switchTo().frame(“name of the frame”);
15 findElement()和findElements()分别用于何种场合?
答:单一匹配和多匹配的区别;
(1)findElement() :用于查找当前网页中与指定定位中,可以匹配的第一个元素,值得一提注意的是,仅返回第一个匹配上的元素;
WebElement element =driver.findElements(By.xpath(“//指定路径”));
(2)findElements() —— 用于查找当前网页中与指定定位匹配的所有元素,所有匹配的元素都将被提取并存储在WebElements列表中;
List <WebElement> elementList =driver.findElements(By.xpath(“//指定路径”));
16 如何在列表中找到多个Web元素?
答:在进行Web测试时,我们经常会遇到一系列相同类型的元素,例如以有序/无序列表形式排列的多个超链接,图像等,要定位一系列同类型的元素,在JAVA中可以通过WebElement List来完成;
假定以下代码用来循环点击页面中有序/无序列表包含的每个相同类型的超链接元素:
-
Sample code:
-
// 创建一个列表,专门用于存放WebElement类型的对象
-
List <WebElement> elementList = driver.findElements(By.xpath("//指定路径"));
-
// 获取列表长度
-
int listSize = elementList.size();
-
// 遍历列表
-
for (int i=0; i<listSize; i++)
-
{
-
// 点击列表中当前元素链接,进入链接所在页面
-
serviceProviderLinks.get(i).click();
-
//回到前一页
-
driver.navigate().back();
-
}
总结
以上基于Selenium核心要点为大家分享了Web自动化测试中面试或笔试常见问答, 在下篇分享中,我们将继续深入探讨Web自动化面试中的必备技能问答,希望能有助于大家面试前的自行备考。
现在还想从事软件测试行业的小伙伴们,想要心仪的工作,要多努力学习哟。我给大家整理了一份800多道软件测试面试真题的PDF文档。高清打印版打包带走,横扫软件测试面试高频问题,涵盖测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来...)
1、阐述软件生命周期都有哪些阶段?常见的软件生命周期模型有哪些?
2、什么是版本控制,常用的版本控制系统有哪些?
3、数据库三大范式是什么?
4、mysq|有关权限的表都有哪几个?
5、MySQL的binlog有有几种录入格式?分别有什么区别?
6、存储引擎选择?
7、什么是索引?
8、索引有哪些优缺点?
…
1、切换目录用什么命令?
2、怎么查看进程信息?
3、怎么查看当前路径?
4、删除文件用哪个命令?
5、对文件的内容进行统计?(行号、单词数、字节数)
6、grep命令有什么用?
…
1、请写出table标签下面会包含哪些标签元素?
2、很多网站不常用table iframe这两个元素,知道原因吗?
3、 jpg和png格式的图片有什么区别?
4、常用浏览器有哪些,内核都是什么?
5、form标签上定义请求类型的是哪个属性?定义请求地址的是哪个属性?
6、简述一下src与href的区别?
7、before和::before区别?
8、如何让一个div.上下左右居中?
…
1、自动化工具选择的关注点?
2、常用移动应用自动化测试工具有哪些?
3、什么是 自动化测试?
4、自动化测试优点?
5、Jmeter的作用优点以及缺点?
…
1、JMeter中处理器的类型是什么?
2、解释什么是预置处理器元件?列出一些预处理器元件?
3、是否提到测试元件的执行顺序?
4、正则表达式中的“包含"和“匹配”表示什么?
5、服务器CPU指标异常怎么办?
6、你们的性能测试需求哪里来?
7、你们性能测试做的是前台还是后台?
8、性能测试指标有哪些?
…
1、说说你最大的缺点?
2、你对加班的看法?
3、你对薪资的要求?
4、在完成某项工作时,你认为领导要求的方式不是最好的,自己还有更好的方法,你应该怎么做?
5、如果你的工作出现失误,给本公司造成经济损失,你认为该怎么办?
…