Selenium 简明教程

110+ Selenium Interview Questions and Answers (2024)

Selenium 是用于自动化测试的开源工具。它主要用于测试网络应用程序和自动浏览器交互。与人类用户与浏览器进行交互的方式类似,Selenium 允许与网页进行交互,例如网页导航、输入文本、单击按钮,以及通过创建脚本来验证预期的结果。开发人员可以使用强大的 Selenium 框架跨各种浏览器和平台测试网络应用程序。

寻求在 Selenium 方面取得优异成绩的应聘者可以使用这些前 110 个 Selenium interview questions and answers 。无论你是新手还是经验丰富的专业人士,你都可以使用这些问题和解答来测试你的 Selenium 知识以及你批判性思考和解决问题的能力。

Selenium Interview Questions and Answers

以下是关于 Selenium 的最常见的面试问题及解答——

1. What is Selenium?

Selenium 是一个免费且开源的 Web 自动化测试工具。它可以用来对网页上的元素执行诸如单击、键入、鼠标和键盘操作等操作,并在执行这些操作后验证生成的结果。

Selenium 支持多种语言,即 JavaC#PythonJavaScript ,并且可以在 Windows、Mac、iPhone 等各种平台上使用。它包括下面列出的工具组——

2. What are the components of Selenium?

Selenium 是一套工具,由多个工具组成,每个工具用于执行基于网络的测试中的不同项目。Selenium 组件包括——

  1. Selenium Integrated Development (IDE) ——此工具主要用于基于网络的测试,并且以录制和回放功能而闻名。

  2. Selenium Remote Control (RC) ——此工具就像一台服务器,能够生成多种语言的脚本。它从测试接收命令,并将它们作为 Selenium 核心 JavaScript 命令的形式发送到浏览器。

  3. Selenium Webdriver ——此工具可以通过直接与网络浏览器进行交互来设计多种语言的脚本。

  4. Selenium Grid ——此工具用于在多台设备、浏览器、操作系统等上并行执行脚本。

3. What are the advantages we get by using Selenium?

使用 Selenium 的优点如下——

  1. 它是一个开源工具,无需任何许可成本。

  2. 它可以与多种浏览器一起使用,例如 Chrome、Firefox、Safari、Edge 等。

  3. 它用于在各种平台和设备(即 Mac、Windows、iPhone、Android)上执行测试。

  4. 它可以与其他框架(如 TestNGJunit )整合。此外,它还可以与其他构建工具一同使用,例如 MavenAnt

  5. 它可用于执行无头和并行执行。

  6. 它会定期更新,并且可以非常容易地进行配置。Selenium 拥有一个庞大的社区支持,如果我们遇到问题,他们会提供帮助。

  7. 它可以与多种编程语言一起使用,例如 Java、JavaScript、C#、 Ruby 、Python、 Kotlin 等。

  8. 它遵循一个用户友好的界面,帮助用户创建和维护测试脚本。

  9. 它不是一个单独的工具,而是一组工具的集合,每个工具都可以用于不同的测试目的。

4. What are the disadvantages we get by using Selenium?

使用 Selenium 的缺点如下所示:

  1. 它仅支持仅基于 Web 的应用程序的测试。

  2. 它需要技术知识和编码技能。

  3. 不建议在条形码、QR 扫描、验证码等场景中进行测试。

  4. 它必须与其他工具集成以生成报告。

  5. 在舒适地用于较新版本的浏览器和平台之前,它需要一些时间。

  6. 它没有任何默认对象存储库。

5. What is meant by automation testing and what are its advantages?

自动化测试是借助测试工具将手动测试用例转换为自动化的过程。具有大量重复和冗余步骤的手动测试通常被选为自动化合适的候选者。但是,需要注意的是,不可能将 100% 的手动测试用例自动化。此外,自动化只能在稳定的软件上采用。

自动化测试的优势如下所示:

  1. 它可用于验证软件的功能性和非功能性要求。

  2. 它具有巨大的投资回报率,因为它节省了大量的时间、金钱和人力。

  3. 可以通过自动化实现并行执行。

  4. 通过避免手动干预执行测试用例,它降低了人为错误的范围。

  5. 通过自动化节省的时间可用于手动测试无法自动化的非常复杂的场景。

  6. 它让测试人员可以在一个测试周期内多次执行回归并重复测试用例。

  7. 它提供了有关如何构建软件的更快速的反馈。

6. Why is Selenium used extensively for automation?

Selenium被广泛用于自动化,因为它与多种浏览器、平台和语言兼容。它不需要任何许可成本。

7. What are known as the Selenese Commands?

Selenese是一组用于执行基于Web的测试的命令。这些命令广泛应用于 Selenium IDESelenese Commands 有三种类型,即Actions、Accessors和Assertions。

8. What are the differences between Selenium 3.x and Selenium 4.x?

Selenium的最新版本是4.x版本。该版本的架构和通信符合W3C。Selenium的3.x版本的架构和通信基于JSON Wire协议。Selenium 4.x具有附加的相对定位器,如above()、below()、toRightOf()、toLeftOf()、near(),以及相对定位器的链接。它还提供访问ChromeDevTools,用于调试、网络流量分析以及有助于自动化的其他功能。

Selenium 3.x扩展了Remote WebDriver,而Selenium 4.x扩展了Chrome Driver。此外,3.x版本需要触发Hub和Node jar来运行Selenium Grid测试,而4.x版本不再需要。Selenium 4.x版本为Chrome和Firefox提供了 Selenium IDE Plugins 。它还附带了Selenium的最新版本的辅助运行器。

9. What are the differences between Selenium 2 and Selenium 3?

Selenium 2和Selenium 3有什么区别?答:Selenium 3.0是Selenium 2.0的改进版本,并且修复了Selenium 2.0版本的错误。Selenium 2.0是 Selenium RCSelenium Webdriver 的组合。但是,Selenium RC从Selenium 3.0版本开始已不再使用。

Selenium 2.0没有太大范围的移动测试,但是,从Selenium 3.0开始,移动测试使用 Appium 进行,并且具有比Selenium 2.0更多更新和改进的API。Selenium 2.0现在不再使用。

10. Name some of the tools used for automation testing

下面列出了一些用于自动化测试的工具:

  1. Selenium − 主要用于基于Web的自动化测试。

  2. Cypress − 主要用于基于Web和API的自动化测试。

  3. Playwright − 主要用于基于Web的自动化测试。

  4. Appium − 主要用于移动自动化测试。

  5. UFT − 是一种许可的Web自动化测试。

  6. JMETER − 主要用于负载测试。

11. What are the various types of locators available in Selenium?

Selenium借助其定位策略来识别网页上的元素。Selenium中提供了以下定位器:

  1. Css

  2. Xpath

  3. Link Text

  4. Partial Link Text

  5. Id

  6. Name

  7. Class Name

  8. Tagname

从Selenium的最新版本开始,提供了相对定位器,用于根据另一个元素的位置来识别元素。以下是Selenium中的一些 Relative Locators

  1. above()

  2. below()

  3. toRightOf()

  4. toLeftOf()

  5. near()

  6. Chaining of locators

12. What are the different types of testing that can be done using Selenium?

下面列出了可以使用Selenium执行的不同类型的测试:

  1. Regression Testing − 此类测试执行以验证代码更改是否在软件中引入了新错误。

  2. Functional Testing −此类测试执行,以检查软件是否按照软件的功能要求和规范工作。

13. What is an Xpath?

xpath 是用于根据其 XML 路径检测元素的查询语言。它用于遍历 XML 文档的 Web 元素及其属性。要获得更多有关 xpath 的信息,请访问以下链接 −

XML 是一种可扩展标记语言,用于存储、管理和发送数据。数据以与 HTML 类似的格式存储在键值对中。Xpath 分为两种类型:相对 xpath 和绝对 xpath。

14. What is an absolute and relative xpath?

绝对 xpath 由双斜线或//表示。它从文档的起始节点开始识别所需的元素。但是,如果任何元素的路径发生变化(从根节点到当前节点的中间位置),现有的绝对 xpath 将停止识别该特定元素。

Absolute Xpath Used: /html/body/main/div/div//div/ul/li[2]/input

相对 xpath 由单斜线或/表示。它从 DOM 中的任何位置开始识别所需的元素。

Relative Xpath Used: //*[@id='gg_bf_1']//parent::ul

15. What are the differences between driver.close() and driver.quit()?

driver.close()用于关闭当前处于焦点的浏览器窗口。如果打开了多个标签和窗口,driver.close()不会关闭所有这些窗口。它只会关闭当前处于活动状态的标签或窗口。如果在驱动程序.close()之后再次调用驱动程序的实例,则将抛出无效会话 ID 的异常。

driver.quit()用于关闭所有打开的窗口和标签,并终止驱动程序会话。如果在驱动程序.quit()之后再次调用驱动程序的实例,则将抛出会话 ID 为 null 的异常。

16. How to wait until a page has been completely loaded using Selenium?

可以使用以下方法在 Selenium 中等待页面完全加载 −

Using the Implicit Wait −在此方法中,在每次页面加载时,它将一直等待页面完全加载。

For Example

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

Using JavaScript Function −在此方法中,调用 JavaScript 返回 document.readyState,直到在页面加载后返回 complete 为止。

For Example

if (document.readyState == "complete"){
   alert("Page is loaded completely");
}

17. What do you mean by exception test in Selenium?

异常测试是一个预测将接收来自测试类的输出的异常的测试。它查找@Test注释,然后查找括号中预期异常的名称。

For Example

@Test
public void test1(expectedException = NoSuchElementException.class){

   // description of test method

}

用于不能识别的元素的上述异常测试。

Selenium 是测试基于 Web 的应用程序的流行选择,因为它是一个相对简单的工具,使用 JavaScript 实现。它与多种浏览器、平台和语言兼容。它可以轻松地与其他第三方工具(如 TestNG、Junit、Maven 等)集成。

19. Name the various annotations used along with Selenium

与 Selenium 一起使用的各种注释通常是 TestNG 测试自动化框架的一部分。下面列出了与 Selenium 一起使用的一些注释 −

  1. @BeforeSuite

  2. @AfterSuite

  3. @BeforeClass

  4. @AfterClass

  5. @BeforeSuite

  6. @AfterSuite

  7. @BeforeTest

  8. @AfterTest

20. What is known as TestNG in Selenium?

TestNG 是可与 Selenium 集成的单元测试自动化框架。它支持对测试进行分组、设置优先级、并行测试等。

21. What is the same-origin policy?

同源策略是应用于浏览器的安全特性,它不允许一个源的文档或脚本访问另一个源的文档或脚本。它包括协议、起源和端口。

因此,如果 web 浏览器的两个脚本都来自类似的源,那么它允许特定 web 页面的脚本访问另一个 web 页面。同源策略保护网页的安全数据免受来自不同来源的另一个网页的恶意攻击。

为了避免同源政策,采用了代理注入技术。在这种方法中,Selenium 服务器充当客户端配置的 HTTP 代理,并欺骗浏览器接受 Selenium Core 和被测应用程序属于同源。

22. Why is Selenium chosen before UFT?

由于以下原因,Selenium 通常比 UFT 更受欢迎 −

  1. UFT 是一款许可工具,意味需要花钱,而 Selenium 是免费且开源的。

  2. UFT 只能测试 Windows 应用程序,而 Selenium 能在 Windows、Linux、Mac、iPhone、Blueberry 等多个平台上进行测试。

  3. UFT 是一个桌面应用程序,而 Selenium 是一组 API。

  4. UFT 仅支持 Visual Basic 脚本,而 Selenium 适用于 Java、C#、Python、JavaScript、Ruby、Kotlin 等多种编程语言。

  5. 如果测试团队正在寻找一个免费的开源工具,并且精通编程语言,那么 Selenium 始终优于 UFT。然而,如果测试团队仅熟悉 VB 脚本,而且需求是验证 Windows 平台,那么可以选用 UFT。

23. What is POM or Page Object Model and what are its benefits?

POM 也称为 Page Object Model 是一个设计模式,该模式通过将元素和测试用例流分离到各个类文件中,可用于创建 Selenium 测试脚本。POM 的优势在于它通过将 Web 元素与测试用例分离,增强了代码的可读性、可重复利用性和易于维护性。

24. What are the different types of waits available in Selenium?

以下是 Selenium 中可用的不同类型的等待:

此类型为默认类型,其中 Selenium 在抛出异常之前等待特定的时间量。

For Example

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

此等待用于告知 Webdriver 在抛出异常之前按特定的条件等待给定的时间量。

For Example

WebDriverWait w = new WebDriverWait(driver, 15);
wt.until(ExpectedConditions.invisibilityOfElementLocated
   (By.xpath("//*[@class='btn']")));

此等候用于告知 Webdriver 在给定的间隔中等待特定条件,在此间隔内,针对特定时间量检查该条件,然后再抛出异常。

For Example

Wait w = new FluentWait(driver).withTimeout(25, TimeUnit.SECONDS)
   .pollingEvery(15, TimeUnit.SECONDS)
   .ignoring(ElementNotInteractableException.class);

wt.until(ExpectedConditions.titleIs("Online Tutorialspoint"));

25. What are the differences between the findElement() and finElements() methods in Selenium?

以下是 Selenium 中 findElement() 和 finElements() 方法之间的差别:

  1. findElement() 返回一个 WebElement,而 findElements() 返回 WebElement 列表。

  2. 如果不存在匹配元素,则 findElement() 抛出 NoSuchElementException,而 findElements() 返回一个大小为 0 的数组列表。

26. What is Selenium Webdriver?

Selenium Webdriver 是 Selenium 套件内的工具集的一部分,可从 Selenium 版本 2 中获得。它可用于使用多种语言、平台和浏览器对 Web 应用程序进行自动化测试。

27. Is Selenium WebDriver a part of the library?

Selenium Webdriver 是一个免费的开源库,用于为基于 Web 的应用程序创建自动化测试脚本。

28. What are the different types of navigation commands used in Selenium?

以下是 Selenium 中所用不同类型的导航命令:

driver.navigate().to("url of application") − 它将导航到应用程序的 URL。

driver.navigate()
   .to("https://www.tutorialspoint.com/selenium/practice/login.php");

driver.get("url of application") − 它将启动浏览器以打开应用程序的 URL。

driver.get("https://www.tutorialspoint.com/selenium/practice/login.php");

driver.navigate().back() − 它将帮助根据浏览器历史记录上下文跳转到上一页。

driver.navigate().back();

driver.navigate().forward() - 这将根据浏览历史记录上下文跳转到下一页。

driver.navigate().forward();

driver.navigate().refresh() - 这将刷新一个网页。

driver.navigate().refresh();

29. What is a data driven framework?

一个 Data Driven 框架是其中测试数据与测试脚本分离。它允许您针对多个数据集执行一个测试用例。此外,如果需要在测试用例中进行更改,可以在不更改测试数据的情况下完成。

30. What all programming languages are supported by Selenium?

Selenium可以与多种编程语言一起使用,如Java,C#,Python,JavaScript,Ruby,Kotlin, Perl 等。

31. What are the differences between driver.get() and driver.navigate.to()?

以下是driver.get()和driver.naviagte.to()之间的差异:

  1. driver.get()方法启动一个URL并等待整个页面加载,而driver.naviaget.to()方法启动一个URL而不等待整个页面加载。

  2. driver.get()方法是WebDriver界面的一个组成部分,而driver.naviaget.to()方法是Navigation界面的一个组成部分。

  3. driver.get()方法不允许浏览器前进或后退到浏览器历史记录及刷新,而driver.naviaget.to()方法允许所有这些。

32. What scenarios cannot be automated by Selenium?

以下是无法通过Selenium自动执行的场景:

  1. 它不能自动化包括位图比较的场景。

  2. 它不能在验证码中自动执行场景。

  3. 它不能在条形码上自动执行场景。

  4. 性能测试可以通过Selenium自动执行,但这不是推荐的执行选择。

  5. 它不能在视频流上自动执行场景。

33. Name some of the open source frameworks that can be integrated with Selenium

以下列出了一些可以与Selenium集成的开源框架:

  1. TestNG - 它是一个可以与Selenium集成的单元测试框架。

  2. JUnit - 它是一个基于Java的单元测试框架。

34. What will happen when the driver.get() method is used in Selenium?

方法driver.get()启动浏览器,打开应用程序URL,并等待整个页面加载。

Syntax

driver.get("https://www.tutorialspoint.com/selenium/index.htm");

要获得有关driver.get()的更多信息,请访问链接 Selenium WebDriver Browser Navigation

35. What is an alternate method to driver.get() method to open an application URL?

driver.get() 方法打开应用程序 URL 的替代方法是 driver.naviaget.to() 方法。它会启动 URL,而无需等待页面完全加载。

Syntax

driver.navigate()
   .to("https://www.tutorialspoint.com/selenium/index.htm");

36. What is a keyword driven framework?

关键字驱动框架是一种实现逻辑和代码隐藏的框架。它是数据驱动框架的一种扩展。将特定序列中的一组关键字放在 Keyword Driven Framework 中创建测试用例。

37. How to upload a file using Selenium?

我们可以使用 Selenium 上传文件。如果文件在同一台机器中或放在映射驱动器中,则我们需要将文件的位置传递给 sendKeys() 方法。

Syntax

WebDriver driver = new ChromeDriver();

// identify element
WebElement m = driver.findElement(By.xpath("value of xpath locator"));

// obtain file path to be uploaded
File file = new File("./Pictures.png");
System.out.println("File path to be uploaded: " + file.getAbsolutePath());

// uploading file with path
m.sendKeys(file.getAbsolutePath());

38. What are the differences between the getWindowHandle() method and the getWindowHandles() method?

getWindowHandle() 方法和 getWindowHandles() 方法之间的区别如下所示 -

  1. getWindowHandles() 方法返回当前打开的所有窗口和选项卡的句柄 ID,而 getWindowHandle() 方法返回处于焦点状态的窗口或选项卡的句柄 ID。

  2. getWindowHandles() 方法使用 Collection Set 返回当前打开的所有窗口和选项卡的句柄 ID,而 getWindowHandle() 方法将处于焦点状态的 Window or Tab 的句柄 ID 返回为 String。

39. What does WebDriver driver = new FireFoxDriver() mean?

在代码语句 WebDriver driver = new FireFoxDriver() 中,WebDriver 是接口,FirefoxDriver 是类。在这里,我们已借助 Java 中的新关键词创建了 FireFoxDriver 类的对象。然后将该对象分配给 WebDriver Interface 的引用变量 - 驱动程序。

该语句通常用于代替 FireFoxDriver driver = new FireFoxDriver(),因为在自动化框架中,我们提供了在多个浏览器中执行测试的规定。要实现此功能,只需将浏览器名称传递给可重用方法,然后该可重用方法将创建正确类的对象,并最终将其分配给 WebDriver 接口。

也可以使用语句 FireFoxDriver driver = new FireFoxDriver() 执行相同操作,但是为了优化代码,我们通常使用 WebDriver driver = new FireFoxDriver()。此外,此语句只有使用和调用适用于 Firefox 浏览器的 FireFoxDriver 的方法的选项。

我们不能创建特定驱动程序的对象,比如说 FirefoxDriver,然后将其分配给另一个浏览器驱动程序,比如说 ChromeDriver。所以语句 ChromeDriver driver = new FireFoxDriver() 是错误的。但是我们可以将 FirefoxDriver、ChromeDriver 等的对象分配给 WebDriver 接口。语句 WebDriver driver = new WebDriver() 没有用,因为 WebDriver 是接口,而我们不能创建接口的对象。

40. Which is the WebDriver’s super interface?

根据类和接口的层次结构,SearchContext 是 WebDriver 的超级接口。Selenium 中类的和接口的层次结构如下图所示 -

webdriver super interface

41. How to enter text in a text box in Selenium?

借助以下方法,我们可以在 Selenium 中文本框中输入文本 -

Webdriver driver = new ChromeDriver();
driver.findElement(By.id("value of id")).sendKeys("value to be entered");
Webdriver driver = new ChromeDriver();
WebElement elm = driver.findElement(By.id("value of id"));
JavascriptExecutor j = (JavascriptExecutor) driver;
j.executeScript("arguments[0].setAttribute('value', 'Selenium')", elm);
Webdriver driver = new ChromeDriver();
Actions a = new Actions(driver);
a.sendKeys(e, "value entered").perform();

42. Can we test APIs and webservices using the Selenium?

Selenium 主要用于测试 Web 应用程序,不用于 API Testing 。仅 Selenium 库不能支持 API 或 Web 服务测试,为此需要其他库,例如 Rest Assured。

43. Do we need to use the Selenium Server to execute Selenium Webdriver scripts?

Selenium Server 用于执行 Selenium Webdriver 脚本,以借助 Selenium Grid 在多个平台、浏览器和机器中触发并行执行。如果要在远程机器中执行测试,那么需要远程服务器来执行测试脚本。

44. What do you mean by WebElement in Selenium?

WebElement 是 Selenium 中的接口,它引用网页上的元素。这用于对页面上的那些元素执行操作。

45. How to move to the nth-child of an element with the help of xpath?

借助以下方法,我们可以通过遵循 xpath 移动到元素的 nth-child -

Using the xpath expression - //parent/childElement[n]

//div/a[5]

以上 xpath 识别的父 div 的第五个锚子级。

Using the child axes in xpath expression - //parent/child::tagname[n]

Webdriver driver = new ChromeDriver();
WebElement parnt = driver.findElement(By.xpath("//ul[@name='toc']"));

//identify all children nodes with ./child::* expression in xpath
List<WebElement> c = parnt.findElements(By.xpath("./child::*"));

46. Is there an Object Repository in Selenium?

Selenium 中没有默认的对象存储库。但是,所有元素定位器都可以定义在单独的类文件、属性文件等中,以便于维护和从测试用例访问。

47. How to insert breakpoints in Selenium IDE?

我们在 Selenium IDE 中插入断点以调试测试步骤。可以通过执行以下方法来应用它们:

  1. 单击测试中的行号以添加断点。

  2. 通过按禁用断点禁用所有断点。再次按同一按钮可启用断点。

  3. 右键单击任意步骤,然后按切换断点。

借助以下方法列表,我们可以在 Selenium 中单击链接:

Using click() method

Webdriver driver = new ChromeDriver();
driver.findElement(By.linkText("Home")).click();

Using the JavaScript Executor

Webdriver driver = new ChromeDriver();
WebElement elm = driver.findElement(By.xpath("//div/ul/li[2]/a"));
JavascriptExecutor j = (JavascriptExecutor) driver;
j.executeScript("arguments[0].click();", elm);

49. How to handle alerts and popups in Selenium?

我们可以在 Selenium 中使用警报接口处理 Alerts and Popups 。最初,驱动程序的焦点在主网页上,要访问警报,我们需要通过 switchTo().alert() 方法将驱动程序的焦点从主网页移到它们。

警报接口的方法如下:

  1. driver.switchTo().alert().accept() - 它接受警报并在警报上单击“确定”。

  2. driver.switchTo().alert().dismiss() - 它拒绝警报并在警报上单击“取消”。

  3. driver.switchTo().alert().getText() - 它获取警报框上的文本。

  4. driver.switchTo().alert().sendKeys("value") - 它输入警报上文本字段中显示的文本。

50. What are the differences between assert and verify commands in Selenium IDE?

assert 和 verify 命令用于在测试用例中添加验证点。如果 assert 命令中检查的条件不满足,执行将在不匹配处停止。否则,继续执行。如果 verify 命令中检查的条件不满足,执行仍在不匹配处继续。

51. How to scroll down on a web page in Selenium?

借助 JavaScript Executor,我们可以在 Selenium 中向下滚动网页。要滚动到一定高度,请使用 scrollBy 方法。

Syntax

JavascriptExecutor j = (JavascriptExecutor) driver;
j.executeScript("window.scrollBy(0,700)", "");

要滚动到页面底部,再次使用 scrollBy 方法。

Syntax

JavascriptExecutor j = (JavascriptExecutor) driver;
j.executeScript
   ("window.scrollBy(0,document.body.scrollHeight)");

向下滚动到网页上元素的可见性。

Syntax

WebElement t = driver.findElement
   (By.xpath("<value of xpath>"));

// scrolling to view of an element

JavascriptExecutor j = (JavascriptExecutor) driver;
j.executeScript("arguments[0].scrollIntoView();", t);

52. What is the difference between getText() and getAttribute() methods in Selenium?

getText() 方法用于获取网页上的元素文本。getAttribute() 方法用于获取 DOM 中元素的运行时值,并且要获取的值作为参数传递。它们两个被称为 WebElement Commands in Selenium

Syntax

WebDriver driver = new ChromeDriver();

// Identify the element
WebElement elm = driver.findElement
   (By.xpath("<value of xpath>"));

// text of the element
String text =  elm.getText());

// Identify another element
WebElement elm1 = driver.findElement
   (By.xpath("<value of id>"));

// enter text in input box
elm1.sendKeys("Selenium Interview");

// Obtain the value entered
String text = elm1.getAttribute("value");

53. How to get a css property of an element?

我们可以用 getCSSValue() 方法获取元素的 css 属性。如果要获取颜色或边框颜色等 css 属性,我们需要将其作为参数传递给这个方法。

Syntax

WebDriver driver = new ChromeDriver();

// Identify the element
WebElement element = driver.findElement
   (By.xpath("<value of xpath>"));

// Get background color
String color = element.getCssValue("background-color"));

54. What is the use of @FindBy annotation in Page Factory?

Page Factory 中的 @FindBy 注解用于标识、声明并在网页上使用定位符(如 xpath、css、tagname、链接文本、部分链接文本、name、类名等)对网页元素执行操作。

Syntax

FindBy(id = "name")
WebElement elm;

55. What do you mean by the Hybrid framework?

混合框架是结合了数据驱动框架和关键字驱动框架特性的框架。使用 Hybrid Framework 构建的测试脚本更健壮,并且更容易维护。

56. How to handle frames in Selenium?

我们可以在 Selenium 中处理框架。最初,驱动的焦点在主网页上,为了访问框架,我们需要通过 switchTo().frame() 方法将驱动焦点从主页面切换到框架。

以下是框架中的一些基本重载方法:

switchTo.frame(args) − 将框架索引号作为参数传递。框架的起始索引为零。

driver.switchTo.frame(0), switching to the first frame.

switchTo.frame(args) − 将框架 id 或 name 作为参数传递。

driver.switchTo.frame(“id-value”), switching to the frame
   having id or name value as id-value.

switchTo.frame(args) − 将框架 webelement 作为参数传递。

driver.switchTo.frame(“id-name”), switching to the frame
   having webelement value as id-name.

driver.switchTo.defaultContent() − 将驱动上下文从框架切换回主页面。

57. How to clear a text from an input box in Selenium?

我们可以使用 clear() 方法来清除 Input Box in Selenium 中的文本。首先,使用 sendKeys() 将文本输入输入框,然后借助 clear() 方法清除文本。

58. How to get the value of an element attribute in Selenium?

我们可以使用 getAttribute() 方法获取 Selenium 中元素属性的值。例如,我们可以使用 getAttribute() 方法获取在文本框中输入的值,然后将值作为参数传递给该方法。

Syntax

// Identify element
WebElement textBox = driver.findElement
   (By.className("<value of class name>"));

// Enter text in text box
textBox.sendKeys("Interview Questions");

// Obtain the value entered
String text1 = textBox.getAttribute("value");

59. How to submit a form in Selenium?

我们可以使用 Selenium 提交 form 。表单元素的标签名是 form,其类型属性的值等于提交。我们可以采用以下方法提交表单:

WebDriver driver = new ChromeDriver();

// Identify element within form
WebElement inputBox = driver.findElement
   (By.xpath("<value of xpath>"));
inputBox.sendKeys("Name");

// Submitting form with submit()
WebElement button = driver.findElement
   (By.xpath("<value of xpath>"));
button.submit();
WebDriver driver = new ChromeDriver();

// Identify element within form
WebElement inputBox = driver.findElement
   (By.xpath("<value of xpath>"));
inputBox.sendKeys("Name");

// Submitting form with click()
WebElement button = driver.findElement
   (By.xpath("<value of xpath>"));
button.click();

60. What is the architecture of Selenium Webdriver?

Selenium Webdriver 在其最新版本 4.x 中的架构完全基于 W3C WebDriver 协议。以前,客户端到服务器的 HTTP 请求和响应是由 JSON Wire 协议执行的。但是,从 4.x 版本开始,Selenium 客户端库与浏览器驱动的通信是通过 W3C WebDriver 协议进行的。

Web 浏览器及其驱动程序已经符合 W3C,因此 Selenium Webdriver 采用了相同的协议,以便在整个架构中遵循标准且通用的协议。它还为测试带来了稳定性,并且可以为多个浏览器使用通用代码。此外,Selenium 中现在使用的 Actions API 提供了其他功能,例如双击键盘、放大/缩小等。

61. Name some of the exceptions faced in Selenium Webdriver

在使用 Selenium 时,我们会遇到许多异常。当找不到元素,或者预期与实际结果不匹配时,或者由于其他任何原因,就会发生异常。该代码生成一个异常,以合乎逻辑的方式结束测试。

62. Name some of the commonly used automation testing tools used for non-functional testing

用于非功能测试的常用 automation testing tools 如下所列:

  1. LoadRunner

  2. JMeter

  3. Silk Performer

  4. Gatling

  5. Apache

  6. Neoload

63. What is the difference between / and // in xpath locator?

单斜杠或 / 表示绝对 xpath,双斜杠或 // 表示相对 xpath。绝对路径从根节点开始定位元素,而相对路径从 DOM 中的任意位置开始标识元素。

Absolute Xpath Used: /html/body/main/div/div/ul/li[3]/a
Relative Xpath Used: //ul[@id='bn_jn_w']//child::li[3]/a

64. Name the various types of Webdriver API used in Selenium

Selenium 中使用的各种 Webdriver API 类型如下所列:

  1. ChromeDriver

  2. FirefoxDriver

  3. InternetExplorerDriver

  4. HTMLUnitDriver

  5. SafariDriver

  6. iPhoneDriver

  7. RemoteWebDriver

  8. AndroidDriver

  9. iPhoneSimulatorDriver

  10. EventFiringWebDriver

65. How to handle the synchronization problems in Selenium?

我们可以通过对测试应用隐式、显式和流畅的等待来处理 Selenium 中的不同同步问题。这些是合并到测试中的等待,以便 Selenium 工具及其与 Web 元素的交互并行进行,并且这两个实体之间没有延迟。

66. Write the code to launch an application in the Chrome browser.

在 Chrome 浏览器中启动应用程序的代码如下 −

package org.example;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;

public class LaunchChromeBrowser {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver();

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // Opening the webpage
      driver.get("https://www.tutorialspoint.com/selenium/practice/radio-button.php");

      System.out.println("Get the page URL: " + driver.getTitle());

      // Closing browser
      driver.quit();
   }
}

67. Write the code to launch an application in the Firefox browser

在 Firefox 浏览器中启动应用程序的代码如下 −

package org.example;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.util.concurrent.TimeUnit;

public class LaunchFirefoxBrowser {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new FirefoxDriver();

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // Opening the webpage
      driver.get("https://www.tutorialspoint.com/selenium/practice/radio-button.php");

      System.out.println("Get the page URL: " + driver.getTitle());

      // Closing browser
      driver.close();
   }
}

68. How to get the text of an element in Selenium?

我们可以使用 getText() 方法在 Selenium 中获取元素文本。

Syntax

// Identify element
WebElement textBox = driver.findElement
   (By.className("<value of class name>"));

// Obtain the text
String text1 = textBox.getText();

69. Can we test the mobile applications using Selenium Webdriver?

我们无法使用 Selenium Webdriver 测试移动应用程序。我们通常使用建立在 Selenium 之上的 Appium 对其进行测试。

70. How to perform the drag and drop operations in Selenium?

我们可以在 Selenium 中使用 Actions 类的方法 dragAndDrop()dragAndDropBy() 执行 drag and drop 操作。dragAndDrop 方法有两个参数——源位置和目标位置。dragAndDropBy 方法有三个参数——源位置、水平方向的 X 偏移值以及垂直方向的 Y 偏移值。

71. How to handle cookies in Selenium?

我们可以在 Selenium 中处理 cookies 。我们可以获取、添加以及删除 cookie。下面列出了 cookie 的基本方法 −

  1. addCookie() − 向当前会话添加 cookie。

  2. getCookieNamed() − 从所有已创建的 cookie 中获取具有特定名称的 cookie。

  3. getCookies() − 获取当前会话的所有 cookie。

  4. deleteCookieNamed() − 删除具有特定名称的 cookie,该名称作为参数传递。

  5. deleteCookie() − 删除 cookie,该 cookie 以 cookie 对象的形式作为参数传递。

  6. deleteAllCookies() − 从当前的浏览器会话中删除所有 cookie。

72. How to handle multiple windows in Selenium?

我们可以在 Selenium 中处理 multiple windows 。最初,驱动程序焦点处在主窗口上,要访问其他窗口,我们需要将驱动程序焦点从主窗口切换到其他窗口,方法是使用 switchTo().window("子窗口句柄 ID") 方法。

与窗口交互的方法如下 −

  1. getWindowHandles() 它以集合集的形式返回当前打开的所有窗口的句柄 ID。

  2. getWindowHandle() 方法返回焦点的窗口的句柄 ID,该值以字符串形式返回。

73. How to enter text in a text box without using the sendKeys() method in Selenium?

我们可以不使用 sendKeys() 方法而输入文本框中的文本。这也可以使用 JavaScript Executor 来完成。

Syntax

Webdriver driver = new ChromeDriver();
WebElement element = driver.findElement(By.name("value of name"));
JavascriptExecutor j = (JavascriptExecutor) driver;
j.executeScript("arguments[0].setAttribute('value', 'Interview')", element);

74. How to perform mouse hover actions in Selenium?

我们可以使用 Actions Class 的 moveToElement() 方法在 Selenium 中执行鼠标悬停操作。

Syntax

WebDriver driver = new ChromeDriver();

// identify element
WebElement m1 = driver.findElement
   (By.xpath("//div/div[3]/nav/div/a"));
Actions actions = new Actions(driver);
   actions.moveToElement(m1).click().build().perform();

75. What is Page Factory?

Page Factory 是一个类,有助于实现页面对象模型。它是页面对象模型的扩展,并且可从 WebDriver 类获得。

76. How to select an option in the dropdown in Selenium?

我们可以使用 Select 类的以下方法在下拉列表中选择一个选项。网页中的下拉列表以 select 标签名表示,其选项以 options 标签名表示。Selenium Webdriver 中有多个 Select 类方法。它们如下所示:

getOptions() − 它返回所有选项的列表。

WebDriver driver = new ChromeDriver();
WebElement elm = driver.findElement(By.id("value of id”))

Select sel = new Select(elm);

List<WebElement> elm1 = sel.getOptions();

getFirstSelectedOption() − 它返回下拉列表中选定的选项。

WebDriver driver = new ChromeDriver();
WebElement elm = driver.findElement(By.id("value of id”))

Select sel = new Select(elm);

options = sel.getFirstSelectedOption();

isMultiple() − 如果下拉列表允许多项选择,则返回 true 值。

WebDriver driver = new ChromeDriver();
WebElement elm = driver.findElement(By.id("value of id”))

Select sel = new Select(elm);

boolean result = sel.isMultiple();

selectByIndex() − 要选择的下拉列表选项的索引作为参数传递。索引从 0 开始。

WebDriver driver = new ChromeDriver();
WebElement elm = driver.findElement(By.id("value of id”))

Select sel = new Select(elm);

sel.selectByIndex(0);

selectByValue() − 要选择的下拉列表选项的值属性作为参数传递。

WebDriver driver = new ChromeDriver();
WebElement elm = driver.findElement(By.id("value of id”))

Select sel = new Select(elm);

sel.selectByValue("option 5");

selectByVisibleText() − 要选择的下拉列表选项的可见文本作为参数传递。

WebDriver driver = new ChromeDriver();
WebElement elm = driver.findElement(By.id("value of id”))

Select sel = new Select(elm);

sel.selectByVisibleText("Interview");

deselectByVisibleText() − 要取消选择的下拉列表选项的可见文本作为参数传递。

WebDriver driver = new ChromeDriver();
WebElement elm = driver.findElement(By.id("value of id”))

Select sel = new Select(elm);

sel.deselectByVisibleText("Interview");

deselectByValue() − 要取消选择的下拉列表选项的值属性作为参数传递。

WebDriver driver = new ChromeDriver();
WebElement elm = driver.findElement(By.id("value of id”))

Select sel = new Select(elm);

sel.deselectByValue("option 5");

deselectByIndex() − 要取消选择的下拉列表选项的索引作为参数传递。

WebDriver driver = new ChromeDriver();
WebElement elm = driver.findElement(By.id("value of id”))

Select sel = new Select(elm);

sel.deselectByIndex(0);

deselectAll() − 取消选择所有已选择的选项。

WebDriver driver = new ChromeDriver();
WebElement elm = driver.findElement(By.id("value of id”))

Select sel = new Select(elm);

sel.deselectAll();

getAllSelectedOptions() − 返回所有已选择的选项。

77. How to work with hidden elements in Selenium?

我们可以借助 JavaScript Executor 在 Selenium 中使用隐藏元素

Syntax

WebDriver driver = new ChromeDriver();

   // Javascript executor class
   JavascriptExecutor j = (JavascriptExecutor) driver;

   // identify hidden element and set value
   j.executeScript
      ("document.getElementById('hidden-field').value='Interview';");
   String st = (String) j.executeScript("return
   document.getElementById('hidden-field').value");

78. What happens when you use both Thread.sleep() and Webdriver waits in Selenium?

Thread.sleep() 会将测试执行停止特定时间,Webdriver 也将等待直到满足条件为止。如果我们同时使用这两个等待,它会增加整体执行时间。

79. What happens when you use both implicit and explicit waits in Selenium?

不建议在同一 Selenium 测试中添加两个 implicit and explicit waits 。在同一个驱动程序会话中添加它们时,会导致不确定的等待时间,例如将显式等待 15 秒和隐式等待 10 秒组合在一起可以在 20 秒后导致超时错误。

隐式等待只在测试脚本中使用一次,并且适用于每个测试步骤。然而,显式等待用于等待特定条件。当这两个等待同时应用时,显式等待会覆盖隐式等待。

80. What is StaleElementReferenceException and avoid to resolve it?

当 Selenium Webdriver 尝试搜索先前可用的 Web 元素而该元素当前不可用或已被从 DOM 中删除时,就会抛出 StaleElementReferenceException。这可能是由于页面刷新或元素或其父级已被移除或删除。因此,当 Webdriver 无法与该元素交互时,就会抛出此异常。

可以通过以下列出的措施避免 StaleElementReferenceException:

  1. Refresh the page again

  2. Wait for that element

  3. 尝试再次访问相同的元素

81. How Selenium is used to launch the different browsers?

Selenium 用于启动不同的浏览器,如 Chrome、Firefox、Edge、Safari 等。

Syntax

// For Chrome
WebDriver driver = new ChromeDriver();

// For Firefox
WebDriver driver = new FirefoxDriver();

// For Edge
WebDriver driver = new EdgeDriver();

// For Safari
WebDriver driver = new SafariDriver();

82. What is an Actions class in Selenium?

Selenium 中的 Actions class 用于执行键盘和鼠标操作。这些操作包括双击、右键单击、单击、按键、拖拽等。Actions 类包括高级用户交互 API。

83. What are the areas where Selenium can contribute more for testing?

Selenium 可用于测试的领域如下所列 −

  1. Mobile Testing

  2. Performance Testing

  3. API Testing

  4. Default generation of reports

  5. Visual Testing

  6. Cross Browser Testing

84. What is a testng.xml file?

testng.xml 文件是 TestNG 单元测试框架的一部分。它用作配置文件,用于运行 TestNG 测试。借助 testng.xml 文件,可以将测试分组、包含或排除,并行执行等。

85. What are assertions in Selenium?

断言是添加到测试用例中的验证点,用于验证软件是否按预期正确工作。在自动化测试用例中添加断言,以确认测试用例是否通过或失败。断言方法可从 TestNG 和 JUnit 库中获得。

86. How to capture screenshots in Selenium Webdriver?

Selenium WebDriver 用于在测试用例失败时 capture screenshots 。它有助于调试失败的测试步骤。getScreenShotAs 方法是 TakeScreenshot 接口的一部分,用于捕获屏幕截图。

Syntax

Webdriver driver = new ChromeDriver();
WebElement l = driver.findElement(By.id("id"));
l.click();

// take screenshot of link and store in a location
File s = l.getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(s, new File("location of screenshot"));

87. How to press the ENTER key within a text box using Selenium?

我们可以使用 sendKeys() 方法和 Key 类在文本框内按 ENTER 键。Keys.ENTER 应作为参数传递给 sendKeys() 方法以执行此操作。

Syntax

WebDriver driver = new ChromeDriver();

// Identify element
WebElement m = driver.findElement(By.name("huj"));
m.sendKeys("Interview");

// Type enter with sendKeys()
m.sendKeys(Keys.ENTER);

88. How to refresh a web page in Selenium?

我们可以在 Selenium 中通过以下列出的不同方式刷新网页 −

Using the Refresh Method

driver.get("https://www.tutorialspoint.com/selenium/index.htm");
driver.navigate().refresh();

Using the sendKeys method

driver.get("https://www.tutorialspoint.com/selenium/practice/text-box.php");
WebElement t = driver.findElement(By.id("fullname"));
t.sendKeys(Keys.F5);

Using the get Method

driver.get("https://www.tutorialspoint.com/selenium/practice/text-box.php");
driver.get(driver.getCurrentUrl());

Using the navigate.to() method

driver.get("https://www.tutorialspoint.com/selenium/practice/text-box.php");
driver.navigate().to(driver.getCurrentUrl());

Using the sendKeys method with ASCII

driver.get("https://www.tutorialspoint.com/selenium/practice/text-box.php");
WebElement t = driver.findElement(By.id("fullname"));
t.sendKeys("\uE035");

89. How to assert the title of a page in Selenium?

我们可以在 TestNG 断言的帮助下断言 Selenium 中页面的标题。

package org.example;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.util.concurrent.TimeUnit;
import org.testng.Assert;

public class AssertBrowserTitle {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new FirefoxDriver();

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // Opening the webpage
      driver.get("https://www.tutorialspoint.com/selenium/practice/alerts.php");

      System.out.println("Get the page URL: " + driver.getTitle());

      // obtain page title and compare
      String actTitle = driver.getTitle();
      String title = “Selenium Practice - Alerts";

      Assert.assertEquals
      (actualTitle, expectedTitle);

      // Closing browser
      driver.close();
   }
}

90. Should Selenium be used to verify the captcha?

否,Selenium 不应用于验证验证码。

91. What is a Selenium Maven project?

Selenium Maven 项目是使用 Maven 作为构建工具并获得运行 Selenium 项目的正确依赖关系的项目。它还有助于为源代码、可重用文件、测试代码等创建正确的项目结构。因此,Maven 有助于实现更轻松的代码维护、可读性和可靠性。

92. Why is switchTo() method used in Selenium?

switchTo() 方法用于将驱动程序焦点从主页移到另一个窗口、选项卡、警报、框架等。

93. How to set the browser window size in Selenium?

我们可以使用以下所列方法在 Selenium 中设置浏览器窗口大小 −

Using the Maximize Method

driver.manage().window().maximize();

Using the setSize Method

Dimension dimension = new Dimension(500, 500);
driver.manage().window().setSize(dimension);

Using the JavaScript Executor Method

((JavascriptExecutor)driver).executeScript("window.resizeTo(500, 400)");

94. List the automation testing tools which can be integrated with Selenium for continuous integration

下面列出了可与 Selenium 集成以实现持续集成的部分自动化测试工具:

  1. Jenkins

  2. CircleCI

  3. AWS CodePipeline

  4. Azure Devops

  5. Bit Bucket

95. What is the disadvantage of implicit wait?

隐式等待是一个全局等待,适用于测试用例中的每一步测试。其默认等待时间为 0,会减慢测试执行速度。此外,如果元素在隐式等待中指定时间后被检测到,则可能会导致错误的失败。

96. Write the code to launch an application in the Internet Explorer browser

在 InternetExplorer 浏览器中启动应用程序的代码如下:

package org.example;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.ie.InternetExplorerDriver;
import java.util.concurrent.TimeUnit;

public class LaunchIEBrowser {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new InternetExplorerDriver();

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // Opening the webpage
      driver.get("https://www.tutorialspoint.com/selenium/practice/modal-dialogs.php");

      System.out.println("Get URL: " + driver.getTitle());

      // Closing browser
      driver.quit();
   }
}

97. How to navigate back to the browser in Selenium?

我们可以使用 navigate().back() 方法在 Selenium 中返回浏览器。它有助于浏览器返回浏览器历史记录。

98. Explain the working of the Selenium Grid

Selenium Grid 用于支持跨多个浏览器、平台、设备和计算机的并行执行。它有助于减少执行时间,并且可以通过在多个计算机上分发执行来有效利用资源。它基于集线器-节点架构。

99. How to identify the dynamic elements in Selenium?

我们可以通过遵循以下列出的方法来识别 Selenium 中的动态元素:

Using Regular Expressions in Locators

WebDriver driver = new ChromeDriver();

// identify element with partial class match with * in css
WebElement element  =
   driver.findElement(By.cssSelector("input[name*='inputTxt']"));

Using Regular Expressions in xpath Locators

WebDriver driver = new ChromeDriver();

// Identify element with contains in xpath
WebElement element  =
   = driver.findElement(By.xpath("//input[contains(@name,'inputTxt')]"))

100. How to set priority to test cases in TestNG?

我们可以通过为具有 @Test 注释的测试方法设置优先级参数来为 TestNG 中的测试用例设置优先级。设置的数字越小,优先级越高。每个测试方法的默认优先级为 0。

101. How to read data from an excel?

我们可以使用第三方库,即 Apache POI ,从 excel 中读取数据。它有助于在工作簿中的工作表中的行和列中遍历后访问各个单元格。

102. How to perform right click in Selenium?

我们可以在 Actions 类的 contextClick() 方法的帮助下对元素执行右键单击。

WebDriver driver = new ChromeDriver();

// Identify element
WebElement element = driver.findElement
   (By.xpath("//div/div/a"));
Actions actions = new Actions(driver);
   actions.moveToElement(element ).contextClick().build().perform();

103. Name the different types of frameworks

下面列出了可用的不同类型的框架:

104. Name different types of listeners in TestNG.

TestNG 中使用的不同类型的侦听器如下所列:

  1. iTestListener

  2. IReporter

  3. IHookable

  4. IExecutionListener

  5. IConfugurable

  6. IAnnotationTransformer

  7. IConfigurationListener

  8. IInvokedMethodListener

105. How to handle windows based popup in Selenium?

Selenium 仅用于测试基于网络的应用程序。要处理 Selenium 中基于窗口的弹出窗口,我们必须将 Selenium 与 AutoIt 或 Robot 类集成在一起。

106. What is the ExpectedConditions class in Selenium?

ExpectedConditions 类是 Selenium 中的一个实用程序类,它提供了在继续下一步之前应该满足的特定条件。这些条件与显式等待一起使用,并有助于实现测试中的同步。ExpectedConditions 类与 WebdriverWait 类一起使用,等待给定条件应在所给时间内得到满足,之后与页面上的 Web 元素的通信再次开始。

Syntax

WebDriverWait wt = new WebDriverWait(driver, 15);
wt.until(ExpectedConditions.invisibilityOfElementLocated
   (By.id("id value")));

107. How to perform the cross browser testing in Selenium?

Selenium 用于执行 Cross Browser Testing 以验证软件是否与多个浏览器兼容。为此,可以针对不同的浏览器执行相同的测试,以检查是否存在任何问题。在 Selenium 中,跨浏览器测试主要是在 TestNG 单元测试自动化框架的帮助下实现的。

108. How to test the login functionality of an application using Selenium Webdriver?

我们可以使用 Selenium Webdriver 识别应用程序的登录功能。首先,我们必须在浏览器中启动应用程序 URL。然后,我们必须使用 Selenium 中提供的任何定位器(例如 ID、类、名称、css、xpath 等)来识别用户名、密码和登录按钮。最后,我们必须使用 sendKeys() 方法输入用户名和密码,并使用 click() 方法单击登录按钮。

package org.example;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.edge.EdgeDriver;
import java.util.concurrent.TimeUnit;

public class Login {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new EdgeDriver();

      // adding implicit wait of 10 secs
      driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

      // Opening the webpage
      driver.get("https://www.tutorialspoint.com/selenium/practice/login.php");

      // identify element
      WebElement username = driver.findElement(By.id("email"));
      username.sendKeys("Selenium Java");
      WebElement password = driver.findElement(By.id("password"));
      password.sendKeys("Automation");

      // identify element
      WebElement loginBtn = driver.findElement
         (By.id("//*[@id='signInForm']/div[3]/input"));
      loginBtn.click();

      // Closing browser
      driver.quit();
   }
}

109. What is the difference between type and typeAndWait commands in Selenium?

type 命令用于在文本框中输入键盘按键值。它还有助于在组合框中选择一个选项。当我们完成输入并且网页开始加载时,使用 typeAndWait 命令。它会一直等到页面加载完毕再继续执行下一个步骤。

110. Describe the usage of Selenium through a test

在开始 Selenium 测试之前,应该满足以下先决条件:

  1. 下载并安装 Java 和 Maven

  2. 下载并安装任何 IDE,例如 IntelliJ

  3. Add the Selenium Dependencies

package org.example;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;

public class FirstTest {
   public static void main(String[] args) throws InterruptedException {

      // Initiate the Webdriver
      WebDriver driver = new ChromeDriver();

      // adding implicit wait of 15 secs
      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

      // Opening the webpage
      driver.get("https://www.tutorialspoint.com/selenium/practice/login.php");

      // identify element to enter email address and password
      WebElement email = driver.findElement(By.id("email"));
      email.sendKeys("Interview");
      WebElement p = driver.findElement(By.id("password"));
      p.sendKeys("Automation");

      // identify login element
      WebElement submitBtn = driver.findElement
         (By.id("//*[@id='signInForm']/div[3]/input"));
      submitBtn.click();

      // Closing browser
      driver.close();
   }
}

111. How to implement the Selenium Webdriver Listeners?

可以通过以下列出的方法实施 Selenium Webdriver 侦听器:

  1. WebDriverEventListener

  2. AbstractWebDriverEventListener

112. How to add a recovery scenario in Selenium Webdriver?

我们可以在 Selenium Webdriver 中通过合并 try-catch 块来添加恢复方案。这是处理代码中异常的一种方法。

Syntax

try {

   // Perform some tasks
} catch(Exception e1) {

   // Code for the catch block
}

113. Is it possible to work with only build() without perform()?

是的,有可能只使用 build() 而不用 perform()。build() 方法构建并返回一个 Actions 类的对象,该对象是一系列操作的集合。如果未使用 build() 方法,则在调用 perform() 时会立即执行操作。