Selenium面试题
目录
1、什么是测试自动化或自动化测试?
2、自动化测试的优势是什么?
3、用于功能自动化的常用自动化测试工具有哪些?
4、用于非功能自动化的常用自动化测试工具有哪些?
5、什么是Selenium?
6、Selenium有哪些不同的组成部分?
7、Selenium支持哪些编程语言、浏览器和操作系统?
8、Selenium版本有哪些重大变化/升级?
9、Selenium支持哪些测试类型?
10、Selenium IDE是什么?
11、Selenium Selenese是什么?
12、在Selenium中定位Web元素有哪些方法?
13、Selenium中有多少种类型的WebDriver API可用?
14、可以与Selenium集成以实现持续测试的自动化工具有哪些?
15、Selenium中的断言是什么?
16、断言和验证命令的区别是什么?
17、XPath是什么?
18、XPath Absolute和XPath属性是什么?
19、XPath中“/”和“//”有什么区别?
20、键入键和键入命令有什么区别?
21、“type”和“typeAndWait”命令有什么区别?
22、findElement()和findElements()有什么区别?
23、Selenium中有多少种等待类型?
24、Selenium中隐式等待的主要缺点是什么?
25、Selenium Grid/网格是什么?
26、如何在Selenium WebDriver中启动不同的浏览器?
27、请编写代码片段以在WebDriver中启动Chrome浏览器?
28、编写代码片段以在WebDriver中执行右键单击元素?
29、编写代码片段以在WebDriver中执行鼠标悬停?
30、在WebDriver中如何进行拖放操作?
31、在WebDriver中刷新网页有哪些方法?
32、编写代码片段以在浏览器历史记录中前后导航?
33、怎样才能得到一个网页元素的文本?
34、如何在下拉列表中选择值?
35、有哪些不同类型的导航命令?
36、如何处理WebDriver中的框架?
37、.NET是否有HtmlUnitDriver?
38、如何通过某些代理从浏览器重定向浏览?
39、什么是POM(页面对象模型)?它的优点是什么?
40、如何在WebDriver中截取屏幕截图?
41、如何使用Selenium在文本框中输入文本?
42、怎么知道一个元素是否显示在屏幕上?
43、如何使用linkText点击超链接?
1、什么是测试自动化或自动化测试?
自动化测试使用自动化工具来编写和执行测试用例,执行自动化测试套件不需要人工参与。测试人员更喜欢自动化工具来编写测试脚本和测试用例,然后组合成测试套件。 自动化测试允许使用专门的工具来自动执行手动设计的测试用例,而无需任何人工干预。自动化测试工具可以访问测试数据,控制测试的执行并将实际结果与预期结果进行比较。因此,生成被测系统的详细测试报告。
2、自动化测试的优势是什么?
自动化测试的一些基本优势如下:
- 自动化测试支持对应用程序的功能和性能测试。
- 它支持重复测试用例的执行。
- 它有助于并行执行。
- 它有助于测试大型测试矩阵。
- 它提高了准确性,因为没有人为错误的机会。
- 它可以节省时间和金钱。
3、用于功能自动化的常用自动化测试工具有哪些?
功能自动化使用的前 10 大自动化测试工具列表如下:
- 由 Teleric 开发的Teleric Test Studio。
- TestingWhiz
- HPE Unified Functional Testing (HP - UFT 以前的 QTP)
- Tosca Testsuite
- Watir
- Quick Test Professional(由 HP 提供)。
- Rational Robot(由 IBM 提供)。
- Coded UI(由 Microsoft 提供)。
- Selenium(开源)。
- Auto It(开源)。
4、用于非功能自动化的常用自动化测试工具有哪些?
一些常用的非功能自动化自动化测试工具列表如下:
- Load Runner,由 Hp 提供。
- JMeter,由 Apache 提供。
- Burp Suite,由 PortSwigger 提供。
- Acunetix,由 Acunetix 提供。
5、什么是Selenium?
Selenium 是一个可移植的软件测试框架。Selenium 工具通过回放工具来编写功能测试,而无需学习测试脚本语言。 Selenium 是使用最广泛的开源 Web UI(用户界面)自动化测试套件之一。Jason Huggins 于 2004 年开发了 Selenium,作为 Thought Works 的内部工具。Selenium 支持跨不同浏览器、平台和编程语言的自动化。
6、Selenium有哪些不同的组成部分?
Selenium 不仅仅是一个工具,而是一套软件,每个软件都有不同的方法来支持自动化测试。它由四个主要组成部分组成,其中包括:
- Selenium 集成开发环境 (IDE)
- Selenium Remote Control(现已弃用)
- WebDriver
- Selenium Grid
7、Selenium支持哪些编程语言、浏览器和操作系统?
Selenium 支持各种操作系统、浏览器和编程语言。分别如下所示:
- 编程语言:C#、Java、Python、PHP、Ruby、Perl、JavaScript。
- 操作系统:Android、iOS、Windows、Linux、Mac、Solaris。
- 浏览器:Google Chrome、Mozilla Firefox、Internet Explorer、Edge、Opera、Safari 等。
8、Selenium版本有哪些重大变化/升级?
Selenium v1.0:
- 1.0 版是 Selenium 的初始版本。
- 它包括三个工具:Selenium IDE、Selenium RC 和 Selenium Grid。
Selenium v2.0:
- Selenium WebDriver 在“2.0”版本中取代了 Selenium RC。
- 随着 WebDriver 的出现,RC 被弃用并移至遗留包。
Selenium v3:
- 最新版本的 Selenium 3 具有新的附加特性和功能。
- 它包括 Selenium IDE、Selenium WebDriver 和 Selenium Grid。
9、Selenium支持哪些测试类型?
可以通过 Selenium 实现的不同类型的测试是:
- 功能测试
- 回归测试
- 健全性测试
- 冒烟测试
- 响应式测试
- 跨浏览器测试
- UI测试(黑盒)
- 集成测试
10、Selenium IDE是什么?
Selenium IDE 是作为 Firefox 扩展实现的,它在测试脚本上提供记录和回放功能。它允许测试人员以多种语言导出录制的脚本,例如 HTML、Java、Ruby、RSpec、Python、C#、JUnit 和 TestNG。 Selenium IDE 的范围有限,生成的测试脚本不是很健壮且可移植。
11、Selenium Selenese是什么?
Selenium 命令,也称为“Selenese”,是 Selenium 中用于运行测试的一组命令。例如命令——打开(URL);在指定的浏览器中启动所需的 URL,它接受相对和绝对 URL。 一系列 Selenium 命令 (Selenese) 一起称为测试脚本。
12、在Selenium中定位Web元素有哪些方法?
在 Selenium 中,网络元素是在定位器的帮助下识别和定位的。定位器指定一个目标位置,该位置在 Web 应用程序的上下文中唯一地定义 Web 元素。因此,为了准确准确地识别 Web 元素,我们在 Selenium 中使用了不同类型的定位器:
- ID
- ClassName
- Name
- TagName
- LinkText
- PartialLinkText
- Xpath
- CSS Selector
- DOM
13、Selenium中有多少种类型的WebDriver API可用?
用于自动化浏览器的 WebDriver API 列表包括:
- AndroidDriver
- ChromeDriver
- EventFiringWebDriver
- FirefoxDriver
- HtmlUnitDriver
- InternetExplorerDriver
- iPhoneDriver
- iPhoneSimulatorDriver
- RemoteWebDriver
14、可以与Selenium集成以实现持续测试的自动化工具有哪些?
Selenium 可用于自动化功能测试,可与 Maven、Jenkins、&Docker 等自动化测试工具集成,实现持续测试。它还可以与 TestNG、&JUnit 等工具集成,用于管理测试用例和生成报告。
15、Selenium中的断言是什么?
断言用作验证点。它验证应用程序的状态是否符合预期。断言的类型是:“assert”、“verify”和“waitFor”。
16、断言和验证命令的区别是什么?
断言和验证命令的区别如下:
断言:断言命令检查给定条件是真还是假。如果条件为真,程序控制将执行下一阶段的测试,如果条件为假,则停止执行,不执行任何操作。 验证:验证命令还检查给定条件是真还是假。它不会停止程序执行,即验证过程中的任何失败都不会停止执行,所有测试阶段都会执行。
17、XPath是什么?
XPath 也被定义为 XML 路径。它是一种用于查询 XML 文档的语言。这是在 Selenium 中定位元素的重要方法。XPath 由路径表达式和一些条件组成。在这里,我们可以轻松编写 XPath 脚本/查询来定位网页中的任何元素。它被开发为允许 XML 文档的导航。它在导航时考虑的关键因素是选择单个元素、属性或 XML 文档的某些其他部分以进行特定处理。它还生产可靠的定位器。关于 XPath 的其他一些要点如下:
- XPath 是一种用于在 XML 文档中定位节点的语言。
- 当没有适合要定位的元素的 id 或 name 属性时,可以使用 XPath 作为替代。
- XPath 提供定位策略,例如:
- XPath 绝对
- XPath 属性
18、XPath Absolute和XPath属性是什么?
XPath Absolute:
- XPath Absolute 使用户能够提及从根 HTML 标记到特定元素的完整 XPath 位置。
- 语法: //html/body/tag1[index]/tag2[index]/…/tagN[index]
- 示例: //html/body/div[2]/div/div[2]/div/div/div/fieldset/form/div[1]/input[1]
XPath 属性:
- 当没有适合要定位的元素的 id 或 name 属性时,始终建议使用 XPath 属性。
- 语法: //htmltag[@attribute1=’value1’ and @attribute2=’value2’]
- 示例: //input[@id=’passwd’ and @placeholder=’password’]
19、XPath中“/”和“//”有什么区别?
单斜杠“/”:单斜杠用于创建具有绝对路径的 XPath。 双斜杠“//”:双斜杠用于创建具有相对路径的 XPath。
20、键入键和键入命令有什么区别?
在大多数情况下,TypeKeys() 会触发 JavaScript 事件,而 .type() 不会。
21、“type”和“typeAndWait”命令有什么区别?
“type”命令用于在软件 Web 应用程序的文本框中键入键盘键值。它也可以用于选择组合框的值,而“typeAndWait”命令在您的输入完成并且软件网页开始重新加载时使用。此命令将等待软件应用程序页面重新加载。如果输入时没有页面重新加载事件,则必须使用简单的“type”命令。
22、findElement()和findElements()有什么区别?
findElement():用于使用给定的“定位机制”在当前页面中查找第一个元素。它返回一个 WebElement。 findElements():它使用给定的“定位机制”来查找当前页面内的所有元素。它返回一个 Web 元素列表。
23、Selenium中有多少种等待类型?
Selenium Webdriver 引入了等待基于 AJAX 的应用程序的概念。有两种类型的等待:
- 隐式等待
- 显式等待
24、Selenium中隐式等待的主要缺点是什么?
隐式等待的主要缺点是它会降低测试性能。 隐式等待的另一个缺点是:假设你将等待限制设置为 10 秒,并且元素在 11 秒内出现在 DOM 中,您的测试将失败,因为您告诉它最多等待 10 秒。
25、Selenium Grid/网格是什么?
Selenium Grid方便您将测试分布在多台机器上,并且同时分布在所有机器上。因此,可以使用相同的文本脚本在 Windows 上的 Internet Explorer 和 Mac 机器上的 Safari 上执行测试。它减少了测试执行的时间并提供了快速的反馈。
26、如何在Selenium WebDriver中启动不同的浏览器?
我们需要创建该特定浏览器的驱动程序实例。例如:
代码语言:javascript复制Java
这里,“WebDriver”是一个接口,我们正在创建一个 WebDriver 类型的引用变量“driver”,使用“FireFoxDriver”类进行实例化。
27、请编写代码片段以在WebDriver中启动Chrome浏览器?
参考以下代码实现:
代码语言:javascript复制public class ChromeBrowserLaunchDemo {
public static void main(String[] args) {
//Creating a driver object referencing WebDriver interface
WebDriver driver;
//Setting the webdriver.chrome.driver property to its executable's location
System.setProperty("webdriver.chrome.driver", "/lib/chromeDriver/chromedriver.exe");
//Instantiating driver object
driver = newChromeDriver();
//Using get() method to open a webpage
driver.get("https://www.baidu.com");
//Closing the browser
driver.quit();
}
}
28、编写代码片段以在WebDriver中执行右键单击元素?
我们将使用 Action 类来生成用户事件,例如右键单击 WebDriver 中的元素。参考代码片段:
代码语言:javascript复制Actions action = newActions(driver);
WebElement element = driver.findElement(By.id("elementId"));
action.contextClick(element).perform();
29、编写代码片段以在WebDriver中执行鼠标悬停?
代码实现如下:
代码语言:javascript复制Actions action = newActions(driver);
WebElement element = driver.findElement(By.id("elementId"));
action.moveToElement(element).perform();
30、在WebDriver中如何进行拖放操作?
执行拖放操作的代码片段:
代码语言:javascript复制//WebElement on which drag and drop operation needs to be performed
WebElementfromWebElement = driver.findElement(By Locator of fromWebElement);
//WebElement to which the above object is dropped
WebElementtoWebElement = driver.findElement(By Locator of toWebElement);
//Creating object of Actions class to build composite actions
Actions builder = newActions(driver);
//Building a drag and drop action
Action dragAndDrop = builder.clickAndHold(fromWebElement)
.moveToElement(toWebElement)
.release(toWebElement)
.build();
//Performing the drag and drop action
dragAndDrop.perform();
31、在WebDriver中刷新网页有哪些方法?
在 Webdriver 中有多种刷新页面的方法。
方法1 使用 driver.navigate 命令
代码语言:javascript复制Java
方法2 使用 driver.getCurrentUrl() 和 driver.get() 命令
代码语言:javascript复制Java
方法3 使用 driver.getCurrentUrl() 和 driver.navigate() 命令
代码语言:javascript复制Java
方法4 使用 sendKeys 命令在任何文本框上按 F5 键
代码语言:javascript复制Java
方法5 使用 sendKeys 命令传递 F5 键的 ascii 值,即“uE035”
代码语言:javascript复制driver.findElement(By textboxLocator).sendKeys("uE035");
32、编写代码片段以在浏览器历史记录中前后导航?
返回浏览器历史记录:
代码语言:javascript复制Java
在浏览器历史记录中向前导航:
代码语言:javascript复制driver.navigate().forward();
33、怎样才能得到一个网页元素的文本?
获取命令用于获取指定网页元素的内部文本。get 命令不需要任何参数,但它返回一个字符串类型的值。它也是从网页验证消息、标签和错误等的广泛使用的命令之一。
代码语言:javascript复制String Text = driver.findElement(By.id("Text")).getText();
34、如何在下拉列表中选择值?
使用 WebDriver 的 Select 类来选择下拉列表中的值。
selectByValue 语法
代码语言:javascript复制Java
selectByVisibleText 语法
代码语言:javascript复制Select selectByVisibleText = new Select (driver.findElement(By.id("SelectID_Two")));
selectByVisibleText.selectByVisibleText("Lime");
Select selectByIndex = new Select(driver.findElement(By.id("SelectID_Three")));
selectByIndex.selectByIndex(2);
35、有哪些不同类型的导航命令?
navigate().back()
上面的命令不需要参数,将用户带回到上一个网页,示例:
代码语言:javascript复制Java
navigate().forward() 上面的命令允许用户参考浏览器的历史导航到下一个网页。示例:
代码语言:javascript复制Java
navigate().refresh()
navigate().refresh()命令允许用户通过重新加载所有 Web 元素来刷新当前网页。
代码语言:javascript复制Java
navigate().to() navigate().to()命令允许用户启动新的 Web 浏览器窗口并导航到指定的 URL。
代码语言:javascript复制driver.navigate().to("https://baidu.com");
36、如何处理WebDriver中的框架?
内联框架缩写为 iframe 。它用于在当前文档中插入另一个文档。这些文档可以是 HTML 文档,也可以是简单的网页和嵌套网页。
按 id 选择 iframe
代码语言:javascript复制Java
使用 tagName 定位 iframe -
代码语言:javascript复制Java
使用索引定位 iframe, frame(index)示例:
代码语言:javascript复制Java
frame(Name of Frame)示例:
代码语言:javascript复制Java
frame(WebElement element) 选择父窗口
代码语言:javascript复制driver.switchTo().defaultContent();
37、.NET是否有HtmlUnitDriver?
要使用 HtmlUnit,首先使用 RemoteWebDriver 并将其传递给所需的功能。
代码语言:javascript复制C#
要运行 Firefox 实现,请使用
代码语言:javascript复制IWebDriver driver
= new RemoteWebDriver(DesiredCapabilities.HtmlUnitWithJavaScript())
38、如何通过某些代理从浏览器重定向浏览?
Selenium 使用 PROXY 类促进从代理重定向浏览。看下面的例子:
代码语言:javascript复制String PROXY = "192.168.10.xx:8080";
org.openqa.selenium.Proxy proxy = new.org.openqa.selenium.Proxy();
proxy.setHTTPProxy(Proxy)
.setFtpProxy(Proxy)
.setSslProxy(Proxy)
DesiredCapabilities cap = new DesiredCapabilities();
cap.setCapability(CapabilityType.PROXY, proxy);
WebDriver driver = new FirefoxDriver(cap);
39、什么是POM(页面对象模型)?它的优点是什么?
页面对象模型是一种用于为 Web UI 元素创建对象目录的设计模式。每个网页都需要有其页面类。page类负责在网页中查找WebElements,然后对WebElements进行操作。
使用 POM 的好处如下:
- 它有助于在 UI 中与 Verification 分开操作和流程 - 提高代码可读性
- 多个测试可以使用同一个对象存储库,因为对象存储库独立于测试用例。
- 代码的可重用性
40、如何在WebDriver中截取屏幕截图?
下面是在 WebDriver 中捕获屏幕截图的程序:
代码语言:javascript复制import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class TakeScreenshot {
WebDriver drv;
@Before
public void setUp() throws Exception {
driver = new FirefoxDriver();
drv.get("https://www.baidu.com");
}
@After
public void tearDown() throws Exception {
drv.quit();
}
@Test
public void test() throws IOException {
//capture the screenshot
File scrFile = ((TakeScreenshot)drv).getScreenshotAs(OutputType.FILE);
// paste the screenshot in the desired location
FileUtils.copyFile(scrFile, new File("C:\Screenshot\Demo.jpg"))
}
}
41、如何使用Selenium在文本框中输入文本?
sendKeys("String to be enter") 用于在文本框中输入字符串。 语法
代码语言:javascript复制WebElement username = drv.findElement(By.id("Email"));
// entering username
username.sendKeys("sth");
42、怎么知道一个元素是否显示在屏幕上?
WebDriver 允许用户检查 Web 元素的可见性。这些网络元素可以是按钮、单选按钮、下拉菜单、复选框、框、标签等,它们与以下方法一起使用。
- isDisplayed()
- isSelected()
- isEnabled()
语法:
代码语言:javascript复制isDisplayed():
boolean buttonPresence = driver.findElement(By.id("abc")).isDisplayed();
isSelected():
boolean buttonSelected = driver.findElement(By.id("abc")).isSelected();
isEnabled():
boolean searchIconEnabled = driver.findElement(By.id("abc")).isEnabled();
43、如何使用linkText点击超链接?
语法:
代码语言:javascript复制Java
上面的命令使用链接文本搜索元素,然后单击该元素,因此用户将被重定向到相应的页面。以下命令可以访问前面提到的链接。
代码语言:javascript复制Java
上面给出的命令根据括号中提供的链接的子字符串搜索元素。之后,partialLinkText() 找到具有指定子字符串的 Web 元素,然后单击它。