Selenium自动化测试面试必备:高频面试题及答案整理

自动化测试已经成为现代软件测试中不可或缺的一部分。在自动化测试中,Selenium是最受欢迎的工具之一,因为它可以模拟用户与Web应用程序的交互。因此,对于许多测试工程师来说,熟练掌握Selenium框架是非常重要的。如果你正在寻找一份自动化测试工作,那么你可能会被问到一些关于Selenium的面试问题。在本文中,我们将介绍一些最常见的Selenium自动化面试问题和答案,帮助你为面试做好准备。

01什么是Selenium?

Selenium一个基于web的开源的UI自动化测试框架。Selenium支持大多数语言,如JavaPHPPythonPerlRuby等。因此成为测试专业人员中最受欢迎的工具之一。它是不同测试工具的组合,如Selenium IDESelenium RCWebDriverSelenium Grid

02什么是Selenese?

Selenium命令通常被称为selenese,是用来运行测试的一个命令的集合。测试人员可以使用Selenese测试损坏的链接、UI上某些对象的存在、Ajax功能、弹窗、窗口、列表选项等等。

03什么是Selenium 2.0?

它是Selenium RC 和 WebDriver 的组合。

04什么是Xpath?

它是XML文档中元素的路径。通过使用它,我们可以很容易地找出网页上的各种元素。如//tagname[@attribute=’value’]

05Selenium WebDriver 中的定位器是什么?

定位器用于识别网页上的元素。它是HTML网页的属性。我们使用不同类型的定位器来查找页面元素,例如:

  • ID

  • Name

  • cssSelector

  • Link text

  • PartialLinkText

  • ClassName

  • tagName

06绝对路径和相对路径有什么区别?

1.绝对路径以单个正斜杠/开头,这意味着你可以从根节点选择元素,

html/body/div[4]/div[2]/a

2.相对路径以双正斜杠//HTML内容的中间开始。它比绝对路径小而健壮,

//*[@id=’Blog1′]/div[1]/a

07Selenium 有哪些缺点?

1.Selenium只支持基于web的应用。
2.无法读取验证码。
3.Selenium 没有生成测试结果的内置工具。
4.由于 Selenium是一个开源工具,所以它不提供任何技术支持。
5.Selenium没有任何对象存储库,因此我们无法在其中维护对象。为了克服这个问题,我们使用页面对象模型概念。

08Assert 和 Verify 有什么区别?

1.Assert:如果我们在测试脚本中使用Assert命令,那么如果有任何测试步骤失败,测试执行将停止。
2.Verify:它还用于验证测试步骤,但在任何时候测试步骤失败,测试执行将继续。

09Selenium Webdriver中的同步是什么?

有时Selenium比我们的Web应用程序更快,反之亦然。在这种情况下,我们必须管理两者的速度以运行我们的测试脚本。所以我们有不同的等待命令,比如隐式等待、显式等待等。

10隐式等待和显式等待有什么区别?

隐式等待:为整个测试执行期间设置时间。例如,如果Selenium没有找到任何元素,那么它会在给定的时间段内等待元素。如果在给定时间内没有找到该元素,那么它将抛出异常ElementNotVisibleException。

driver.manage().timeouts().implicitlyWait(20, TimeUnits.SECONDS);

显式等待:为特定的一个元素设置时间。如元素可见,按钮可点击等。如果我们为按钮设置显式等待3秒,然后Selenium为该按钮等待3秒。如果按钮在3秒内无法单击,则Selenium会抛出异常ElementNotVisibleException。

WebDriverWait wait = new WebDriverWait(driver, 3);
wait.until(ExpectedConditions.elementToBeClickable(By.id(“id”)));
11什么是iframe以及如何定位?

1.iframe是一个网页,它是HTML页面的独立部分。iframe用于显示一些不同的东西,如广告等。对于 iframe,我们使用<iframe>标签。
2.如何处理iframe:在处理iframe之前,我们首先应该知道如何识别任何网页中的iframe。因此,首先需要在网页中搜索iframe,如下图所示。

Selenium中可以用三种不同的方式来处理iframe

  • By Name

driver.switchTo().frame(“frameName”);
  • By Index

driver.switchTo().frame(indexOfFrame);
  • By WebElement

driver.switchTo().frame(“xpath of frame “);
12Webdriver有哪些不同类型的驱动程序?
  • FirefoxDriver

  • ChromeDriver

  • InternetExplorerDriver

  • SafariDriver

  • OperaDriver

  • AndriodDriver

  • IPhoneDriver

  • HtmlUnitDriver

13如何断言是否选中了复选框

可以使用isSelected()方法

driver.findElement(By.xpath(“locator of Checkbox”)).isSelected();
14如何断言按钮是否启用?

可以使用isEnabled()方法

driver.findElement(By.xpath(“locator of  button”)).isEnabled();
15如何断言元素是否可见?

可以使用isDisplayed()方法

driver.findElement(By.xpath(“locator of  web element”)).isDisplayed();
16如何从文本框中获取文本?

可以使用getText()方法

driver.findElement(By.xpath(“xpath of textbox”)).getText();
17什么是动作类(Actions)?

Actions类用于处理键盘事件、鼠标悬停事件(如拖放、回车、TabShift键等)。我们还可以双击任何元素,使用Action类右键单击任何元素。

Actions act = new Actions(driver);
// 鼠标悬停在元素上并单击它
act.moveToElement(element).click().build().perform();

注意:Actions类中的build()和perform()是两个非常重要的方法,它们通常一起使用。build()方法用于构建要执行的所有操作序列,但是并不实际执行这些操作。如果在build()方法后没有调用perform()方法,那么这些操作将不会被执行。perform()方法用于实际执行在build()方法中构建的所有操作序列。当调用perform()方法时,Selenium会按照构建的序列依次执行每个操作。

18如何从下拉列表中选择一个值?

通过使用Select类,有以下方法可以获取下拉列表的值。

  • selectByIndex()

  • selectByValue()

  • selectByVisibleText()

WebElement element = driver.findElement(By.xpath(“xpath of city dropdown”));
Select dropdownvalue = new Select(element);
// 选择第二个下拉值 - Jaipur
dropdownvalue.selectByIndex(1);
dropdownvalue.selectByValue(“Jaipur”);
dropdownvalue.selectByVisibleText(“Jaipur”);
19get()和navigate()有什么区别?
  • get()方法用于导航到指定的URL,并等待页面加载完成。

driver.get(“https://www.cnblogs.com/mrjade”);
  • navigate()方法提供了一组导航方法,包括 back()forward() 和 refresh()。这些方法用于在浏览器历史记录中导航,或者刷新当前页面。

driver.navigate().forward();
driver.navigate().back();
driver.navigate().refresh();
20如何处理Alert弹窗?

Selenium可以使用Alert类来处理JavaScript弹窗

// 在 alert 单击确定按钮
driver.switchTo().alert().aceept();
// 在 alert 单击取消按钮
driver.switchTo().alert().dismiss();
// 获取 alert 文本
String alerttext = driver.switchTo().alert().getText();
21如何获取Web应用程序页面标题?
String pagetitle = driver.getTitle();
22如何在Selenium中处理多个窗口?
  • 获取当前窗口句柄。

  • 打开新窗口。

  • 获取所有窗口句柄列表。

  • 遍历窗口句柄列表,找到新窗口句柄。

  • 切换到新窗口。

  • 执行操作。

  • 切换回原来的窗口。

// 获取当前窗口句柄
String originalHandle = driver.getWindowHandle();
// 点击“打开新窗口”链接
driver.findElement(By.linkText("打开新窗口")).click();
// 获取所有窗口句柄列表
Set<String> handles = driver.getWindowHandles();
/ 遍历窗口句柄列表,找到新窗口句柄
for (String handle : handles) {
if (!handle.equals(originalHandle)) {
driver.switchTo().window(handle);
break;
}
}
23如何断言提示框文本?

要验证提示框文本,我们必须将鼠标悬停在出现提示框的文本元素上,然后使用getAttribute()方法获取。

WebElement element = driver.findElement(By.xpath(“xpath"));
Action act = new Actions(driver);
act.moveToElement(element).build().perform();
// 获取提示文本
tring tooltip_text = element.getAttribute(“title”)
// 断言
Assert.assertEquals(“mrjade”, tooltip_text);
24如Selenium可能出现的异常有哪些?
  • NoSuchElementException:当 WebDriver无法使用指定的定位器找到网页上的元素时,会发生此异常。

  • ElementNotVisibleException:当WebDriver无法与元素进行交互,因为该元素在网页上不可见时,会发生此异常。

  • TimeoutException:当WebDriver无法在指定的时间限制内执行操作时,会发生此异常。

  • StaleElementReferenceException:当WebDriver无法与元素进行交互,因为该元素不再附加到网页的DOM 上时,会发生此异常。

  • NoSuchFrameException:当WebDriver无法使用指定的定位器找到网页上的框架时,会发生此异常。

  • InvalidSelectorException:当指定的定位器策略无效或定位器语法不正确时,会发生此异常。

  • WebDriverException:这是一种通用的异常情况,可能由各种原因引起,例如网络问题、服务器问题或浏览器崩溃等。

25如何使用Selenium上传文件?

如果是input元素,可以通过使用sendKeys()方法,上传文件。在sendKeys中,只需要传文件路径+文件名即可。但有时当我们点击上传文件按钮时,会打开弹出窗口以从Pc中选择文件。在这种情况下,sendKeys命令不起作用,所以我们可以使用第三方工具如:AutoItRobot 来上传文件。

最后: 为了回馈铁杆粉丝们,我给大家整理了下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

这些面试资料获取方式:进入我创建的软件测试学习交流群:914172719,备注“入群”可自取这份文档, 大家也可以一起探讨交流,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路。

 

热门相关:无量真仙   梦回大明春   战神   最强反套路系统   梦回大明春