如何在 Selenium Java 中处理自动建议
您可能已经注意到,在 Google 上搜索或浏览电子商务平台时,当您开始输入时,自动建议几乎会立即出现。这些建议称为自动建议,旨在根据您的输入提供潜在相关关键字和热门搜索的快速指南。当您在搜索框中输入内容时,网站会显示一个自动建议列表,以帮助您完善搜索并快速访问相关信息。
由于这些建议的动态性质,自动与Selenium进行网站交互以处理自动建议可能会带来挑战。与网页上的静态文本不同,自动建议形成一个不断变化的列表,适应用户提供的输入。
该博客深入探讨了在Selenium Java中处理Web 自动化自动建议的复杂性。我们将探索不同的技术,在网络自动化脚本中自动化这些建议,同时获得对自动建议动态的宝贵见解。此外,我们将解决自动化过程中的潜在挑战。
在这篇关于在 Selenium 中处理自动建议的博客结束时,您将能够使用不同的技术来处理自动建议并在自动化脚本中实现它们。那么,让我们开始探索自动建议的世界吧!
什么是自动建议?
自动建议或自动完成功能根据用户在搜索框或网页上任何其他输入字段中的输入向用户提供潜在的建议。这些建议旨在帮助用户更有效地查找相关信息或完成输入。
这些被实现为一个下拉列表,其中包含用户继续输入时可能的建议列表。这有助于用户从列表中选择所需的术语,而无需完全输入。
在 AJAX(异步 JavaScript 和 XML)请求的推动下,动态建议列表会随着用户输入的变化而变化。这可以确保用户在打字时获得无缝的体验,并在后台从服务器或 API 获取建议。
此外,通过我们广泛的指南了解测试执行引擎的细节,并通过自动化增强您的测试工作流程。
自动建议非常有用,因为它们依赖 AJAX 查询提前提供相关选项,这有助于缩短搜索术语所需的时间。这些自动建议在电子商务和金融科技领域也有广泛的应用,有助于快速产品搜索并帮助列出所有相关产品。
本详细指南解释了如何检测片状测试、其原因、减少片状测试的策略等等。
自动建议的优点
自动建议或预测搜索通过使用 AJAX 请求实现更快的搜索来改善用户体验,从而提供多种好处。以下一些优点使自动建议成为任何网站上流行的策略。
增强的用户体验
提高搜索效率
自动修正带来更高的准确度
适合移动设备的体验
了解TestRunner如何改变自动化测试世界。探索其主要功能和优势。立即使用 TestRunner 改进测试流程。
在 Selenium 中处理自动建议的挑战
自动建议为增强性能提供了显着的优势,因为它们提供了有关网站主题的相关信息,而无需加载整个内容。这有助于节省用户浏览网站上所有内容的时间和精力。
然而,内容是动态的;因此,我们需要在自动化中使用正确的方法来处理动态因素。此外,加载结果可能需要一些时间,具体取决于外部因素(特别是互联网速度)。在Selenium 自动化中处理自动建议时,这变得具有挑战性。在学习处理Selenium Java 测试中的自动建议之前,让我们先看看其中一些常见的挑战。
- 自动建议列表延迟
自动建议列表依赖于异步调用来显示结果。有时,如果 Selenium 尝试立即与其交互,并且建议列表可能尚未完全加载,这可能会导致计时问题。由于测试环境中的互联网连接不稳定,也可能会发生这种情况。
- 高动态内容
自动建议是根据搜索词动态生成的。即使同一搜索词发生最轻微的变化,例如添加额外的空格或任何其他字符,也可能会更改列表中的建议。如果使用特定的 Web 元素定位器,那么在使用 Selenium 自动化时这将变得具有挑战性。
使用我们免费的在线 Android 模拟器在任何移动操作系统上测试本机、混合和 Web 应用程序。注册以优化应用程序性能。
在 Selenium 中处理自动建议的最佳实践
为了克服上面讨论的挑战并使 Selenium 中的自动建议处理更加稳健,我们在编写自动化测试时遵循了许多实践。以下是我们将在下一个演示部分遵循的一些最佳实践。
- 使用显式等待
正如前面在挑战中提到的,自动建议列表可能会出现加载延迟,如果 Selenium 脚本尝试立即与其交互,则可能会导致失败。为了解决这些问题,强烈建议等待自动建议列表完全加载后再与之交互。Selenium 中的显式等待对于处理此类情况特别有价值。
Selenium 中的显式等待和ExpectedConditions使自动化测试在继续之前等待某个元素。在我们的用例中,此 Web 元素将是自动建议列表。
- 独特的 WebElement 定位器
如果不使用正确且唯一的 webElement 定位器,在 Selenium 中处理自动建议可能会成为一场噩梦。这是因为它们是高度动态的,并且 Web 元素定位器可能会根据输入不断变化。
因此,建议使用唯一的定位符,例如 ID、名称或类,这些定位符很少更改,并且无论搜索输入项如何,都有助于与列表进行交互。另外,请始终记住不要使用任何此类包含搜索词参考的定位器策略,因为该词可能在每次运行中都会有所不同,并且会使定位器过时。
- 验证建议值
要从自动建议列表中选择正确的术语,您应始终在选择该值以访问结果页面之前验证该值。进行此比较时请考虑不区分大小写的方法,因为不同的自动建议运行的结果可能会有所不同。
Selenium 断言可用于验证结果页面上的搜索词是否与预期值相似。
- 使用键盘事件
在 Selenium 自动化中处理自动建议的最常见方法之一是使用键盘事件,例如向下箭头键和 Enter 按钮。当您从自动化案例中的列表中选择第一个或第二个元素而不比较值时,建议这样做。
从上面的代码片段中,您可以看到我们要单击列表中的第二个元素。同样,使用Selenium 中的 sendKeys() 方法创建了一个 for 循环来按下向下箭头键。
一旦到达列表中所需的元素,for 循环就会中断,再次使用 sendKeys() 方法来点击 Enter 按钮以选择该选项。
为此,我们还可以使用Selenium Java 中的 ActionsChains通过 Actions 类创建操作链。这有助于使用 WebDriver 实例执行低级鼠标操作,例如单击、拖动、悬停或键盘操作。
在本博客中,我们仅介绍 Selenium Java 中用于处理自动建议的 sendKeys() 方法实现。这是因为,在这种情况下,不需要 ActionChains,因为我们只需执行两个快速关键操作。
因此,我们已经了解了有助于处理 Selenium 中自动建议的挑战和最佳实践。让我们看一下如何在 Selenium Java 自动化项目中使用这些的一些实际实现。
提升您的移动应用程序测试质量:充分利用您的移动应用程序测试并在 LambdaTest Cloud 上进行测试,以进行全面测试、错误检测等。
演示:在 Selenium Java 中处理自动建议
为了演示在 Selenium 自动化中处理自动建议的最佳方法,我们将使用Selenium 4 创建一个带有 Maven 和 TestNG 的 Java 项目。
本博客中将自动执行以下测试场景,以帮助理解迄今为止讨论的所有方法和最佳实践。
测试场景 — 1(通过获取自动建议列表处理 Selenium 中的自动建议)
在搜索框中输入lambdatest作为搜索词。
等待自动建议列表可用。
获取对所有自动建议的 WebElement 引用,并将其存储在 WebElement 类型的列表变量中。
启动一个循环来遍历列表中的每个 WebElement。
比较自动建议是否与所需术语匹配。
如果匹配,请通过单击并打破循环来选择相同的内容。否则,继续直到列表末尾等待加载搜索结果页面。
断言结果页面上的搜索词是否与预期相同。
测试场景 — 2(使用 sendkeys() 在 Selenium 中处理自动建议)
在搜索框中输入lambdatest作为搜索词。
等待自动建议列表可用。
单击向下箭头键开始循环以到达自动建议列表中的第二个建议。
单击该术语的 Enter。
等待搜索结果页面加载。
断言结果页面上的搜索词包含最初给定的搜索关键字。
测试场景 — 3(使用网络抓取在 Selenium 中处理自动建议:Google)
在搜索框中输入 **lambdatest ** 作为搜索词。
等待自动建议列表可用。
获取对自动建议列表的 WebElement 引用并将其存储在变量中。
启动循环以从自动建议列表中抓取(或报废)每个术语的建议数据。
比较网络抓取的列表数据是否与所需术语匹配。
如果匹配,请通过单击并打破循环来选择相同的内容。否则,继续直到列表末尾
等待加载搜索结果页面。断言结果页面上的搜索词是否与预期相同。
使用 LambdaTest自动化Cypress 测试并执行浏览器自动化测试。我们的云基础设施拥有 3000 多个桌面和移动环境。免费试用!
项目设置
在本博客中,使用Eclipse IDE来创建项目。您还可以选择您选择的任何其他 IDE。
对于本博客中的所有测试场景,都使用相同的项目设置。我们不断在新的测试文件中为每个场景添加新的测试用例。因此,请在您的计算机上仔细进行设置,以避免在执行阶段出现任何错误。
本博客中演示的所有测试场景都是 Selenium Web 自动化脚本。我们将在云 Selenium Grid上执行它们。使用 Selenium 云网格可提高速度和可扩展性,并使自动化测试更快、更可靠。它还允许跨各种浏览器和操作系统执行多个案例。
为了实现同样的目的,本博客中使用了 LambdaTest 云 Selenium Grid。LambdaTest 是一个由 AI 驱动的测试编排和执行平台,使用户能够跨 3000 多个真实浏览器、设备和操作系统组合对 Web 和移动应用程序进行Java 自动化测试。
查看有关如何开始在 LambdaTest 上使用 Java 进行 Selenium 测试的文档。
此外,它还提供了多种自动化测试工具和框架的选择,例如 Selenium、Cypress、Playwright和Appium,从而实现测试用例的高效执行。
步骤 1.启动 Eclipse IDE 并创建一个新的 Maven 项目HandlingAutoSuggestionsSelenium。
步骤 2.在 src 包中添加 2 个新包,并将它们命名为base * 和 *test。
步骤 3.在基础包中添加 Java 类文件,并将其命名为BaseTest.java。该文件将包含所有测试用例的通用代码,例如初始化 WebDriver 、浏览器交互以及对自动建议列表进行初始搜索。
步骤4.在测试包下添加3个Java类文件。这些将包含我们不同测试场景的代码。
完成所有这些步骤后,项目结构应如下所示:
当我们在项目中使用 Selenium 和TestNG时,请在 pom.xml 中添加 Selenium 4 和 TestNG 依赖项。建议使用该项目的最新稳定版本以获得最佳结果。
最终的 pom.xml 如下所示。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>HandlingAutoSuggestionsSelenium</groupId>
<artifactId>HandlingAutoSuggestionsSelenium</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>19</release>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.8.3</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.7.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
接下来,我们转向BaseTest.java。该文件将具有主要的驱动程序功能,例如初始化驱动程序、退出驱动程序等。
package base;
import java.net.MalformedURLException;
import java.net.URL;
import java.time.Duration;
import java.util.HashMap;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.safari.SafariOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
public class BaseTest {
public RemoteWebDriver driver = null;
public WebDriverWait wait;
String username = System.getenv("LT_USERNAME") == null ? "<lambdatest_username>" : System.getenv("LT_USERNAME");
String accessKey = System.getenv("LT_ACCESS_KEY") == null ? "<lambdatest_accesskey>" : System.getenv("LT_ACCESS");
@BeforeTest
public void setup() {
try {
SafariOptions safariOptions = new SafariOptions();
safariOptions.setPlatformName("MacOS Ventura");
safariOptions.setBrowserVersion("16.0");
HashMap<String, Object> ltOptions = new HashMap<String, Object>();
ltOptions.put("build", "Auto Suggestions in Selenium");
ltOptions.put("name", "Handling Auto Suggestions");
ltOptions.put("w3c", true);
safariOptions.setCapability("LT:Options", ltOptions);
driver = new RemoteWebDriver(
new URL("https://" + username + ":" + accessKey + "@hub.lambdatest.com/wd/hub"), safariOptions);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
@AfterTest
public void tearDown() {
driver.quit();
}
/*
* 1. Navigate to Google 2. Enter search term 3. Wait for auto-suggestions list
* to be visible
*/
public void navigateToGoogleAndSearch() {
// to navigate to the website and enter the search term
System.out.println("Navigating to the website");
driver.get("https://www.google.com");
System.out.println("Entering search term as lambdatest");
driver.findElement(By.name("q")).sendKeys("lambdatest");
// explicit wait to wait for the auto suggestions list to be present
wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@role='listbox']")));
System.out.println("Auto-suggestions list found");
}
}
本指南探讨了数字化转型及其好处、目标、重要性和数字化转型所涉及的挑战。
代码演练
*步骤1. **创建 *RemoteWebDriver 的对象并将其初始化为null。
另外,创建一个WebDriverWait对象,稍后将使用该对象来实现显式等待。该等待对象将允许代码等待给定的时间,直到满足给定的条件,然后再继续。
步骤 2.从LambdaTest 密码和安全部分获取 LambdaTest 帐户的用户名和访问密钥,以连接到其云网格。
或者,您可以将它们配置为环境变量并直接在代码中获取它们。
对于 macOS 和 Linux:
export LT_USERNAME=LT_USERNAME
export LT_ACCESS_KEY=LT_ACCESS_KEY
对于 Windows:
set LT_USERNAME=LT_USERNAME
set LT_ACCESS_KEY=LT_ACCESS_KEY
步骤 3.接下来,添加一个方法并将其命名为setup()。这将包含使用浏览器属性和 LambdaTest 云 Selenium Grid 属性进行 WebDriver 初始化的代码。在 TestNG 中使用@BeforeTest 注解对其进行注解,以便在每次测试执行之前执行它。
*步骤 4. **创建 *SafariOptions 类的对象。这将有助于设置执行测试所需的浏览器属性。使用它设置操作系统和浏览器版本。
步骤 5.使用Hashmap类型变量指定 LambdaTest 平台支持在其 Selenium 云网格上执行测试所需的其他浏览器功能。这将有助于使用构建名称和其他详细信息来识别仪表板上的测试结果。
我们还可以通过导航到“自动化功能生成器”来获取 LambdaTest 平台所需的浏览器功能。这有助于提供现成的代码来设置可在执行中使用的浏览器功能。
步骤 6.最后,使用Selenium RemoteWebDriver连接到 LambdaTest 远程网格,其中使用您的凭据和包含所有指定浏览器功能的 safariOptions 对象。
步骤7.添加一个新方法tearDown() ,并使用@AfterTest进行注释。每次测试执行后都会调用此函数来关闭浏览器并终止 Web 驱动程序会话。
步骤 8.最后,我们将最后一个实用方法添加到此基本文件中,其中包含每个测试场景的通用步骤。
8.1)使用driver.get()方法导航到被测网站。
8.2)获取搜索输入框的Web元素并输入搜索词。
我们在这里使用 *name *locator 来定位此 Web 元素。
8.3)实例化我们最初创建的WebDriverWait类对象,等待任何条件的最长时间为10秒。这将在给定时间内阻止 WebDriver,阻止其执行任何进一步的操作,并在满足条件后立即解除阻止。
8.4)使用这个等待对象,我们在 Selenium 中实现ExpectedConditions,它告诉驱动程序等待给定的 Web 元素可见。在这种情况下,我们等待自动建议列表可见,然后再继续使用不同的方法。
到目前为止,2023 年最需要的自动化测试工具有哪些?让我们来看看。
使用自动建议列表处理 Selenium 中的自动建议
在 Selenium 自动化脚本中处理自动建议的第一种也是最常用的方法是遍历整个自动建议列表并比较值以选择所需的建议。当我们已经知道要查找的确切搜索词并且不希望选择任何随机搜索词时,这非常有用。
重要的是要记住,根据地理位置,相同的搜索查询将提供不同的自动建议列表。发生这种情况是因为同一个术语在不同的地方可能有不同的引用,或者有时它可能在一个地方引用某些内容而在另一个地方没有生成任何结果。因此,在应用此策略时要小心并为您的测试用例确定准确的搜索词。
package test;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.testng.Assert;
import org.testng.annotations.Test;
import base.BaseTest;
public class TestUsingSuggestionsList extends BaseTest {
@Test
public void testUsingAutoSuggestionsList() {
String expectedSearchTerm = "lambdatest careers";
navigateToGoogleAndSearch();
// to fetch the webElement for all the suggestions from list
List<WebElement> autoSuggestionList = driver.findElements(By.xpath("//*[@role='option']"));
// to traverse the list and navigate to required suggestion search results
for (WebElement autoSuggestion : autoSuggestionList) {
System.out.println("Auto Suggestion Value : " + autoSuggestion.getText());
if (autoSuggestion.getText().equalsIgnoreCase(expectedSearchTerm)) {
System.out.println("\nFound required value in auto suggestion list. Clicking on it now\n");
autoSuggestion.click();
break;
}
}
// wait for the search results page to load and verify if it has the same term as we
// expected.
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@type='search']")));
Assert.assertEquals(driver.findElement(By.xpath("//*[@type='search']")).getText(), expectedSearchTerm,
"Valid Search result page.");
System.out.println("Reached to google search result page for : " + expectedSearchTerm);
}
}
代码演练
步骤 1.在测试包TestUsingSuggestionsList下添加一个新的 Java 文件。该类将扩展BaseTest.java以继承其中的常用方法和变量。
步骤2.添加测试用例为testUsingAutoSuggestionsList()并使用@test注释对其进行注释。
步骤 3.在变量中设置预期的搜索词,我们将从自动建议列表中找到该变量,然后在最后的结果页面上断言。
*步骤 4. **调用BaseTest.java的*navigateToGoogleAndSearch()导航到网站,输入搜索词,然后等待自动建议列表可见。
步骤 5.接下来,我们使用 Web 元素定位器获取所有自动建议选项的列表,并将它们存储在变量中。
下面的屏幕截图显示我们正在使用角色属性来获取整个列表。它给出了出现的总数,并且每个都可以在代码中单独访问。
步骤 6.启动一个循环来遍历此建议列表并从中获取值。我们首先记录找到的每个值,然后将其与实际预期项进行比较。
如果两者匹配,则停止循环,并单击该特定的自动建议值。如果不匹配,我们继续循环。
步骤 7.等待加载所选术语的搜索结果页面。
我们再次使用相同的WebDriverWait对象,但这次实现ExpectedConditions来等待结果页面上的不同元素。
步骤 8.最后,断言此页面上的搜索词与预期搜索词匹配。您可以通过关于 TestNG 中的断言的博客了解更多信息。
执行此测试用例将给出如下输出:
LambdaTest 仪表板上的执行日志如下所示。您可以注意到正在获取所有自动建议列表值。
不要错过有关自动化测试的最新教程!订阅LambdaTеst YouTube 频道,获取有关Selenium 测试、Playwright 测试等的教程。
在这篇关于移动自动化测试工具的博客中,我们列出了最好的 11 个移动自动化测试工具及其优势和商业友好的功能。
使用 sendKeys() 处理 Selenium 中的自动建议
当我们没有要选择的预定义目标搜索词时,这种使用键盘按键操作在 Selenium 中处理自动建议的方法非常有用。它用于仅处理自动建议列表并选择一个术语是我们的 Selenium 测试用例的要求的情况。
package test;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.testng.Assert;
import org.testng.annotations.Test;
import base.BaseTest;
public class TestUsingKeyActions extends BaseTest {
@Test
public void testUsingArrowKeys() {
navigateToGoogleAndSearch();
// if we want to specifically click on the second term from auto-suggestions
// list
for (int i = 1; i < 3; i++) {
driver.findElement(By.name("q")).sendKeys(Keys.ARROW_DOWN);
System.out.println("Pressing down arrow key to reach " + i + " search term");
}
System.out.println("Hitting enter key on the required search term");
driver.findElement(By.name("q")).sendKeys(Keys.ENTER);
// wait for the search results page to load and verify if it has the same term as we
// expected.
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@type='search']")));
System.out.println(
"Search term on results page: " + driver.findElement(By.xpath("//*[@type='search']")).getText());
// verify that search term on results page consists of the initial input term given
Assert.assertEquals(driver.findElement(By.xpath("//*[@type='search']")).getText().contains("lambdatest"), true,
"Valid Search result page.");
System.out.println("Reached to search result page for given term");
}
}
代码演练
步骤 1.在同一包中添加一个新的 Java 测试文件,并将其命名为TestHandleAutoSuggestions_UsingKeyActions。就像前面的测试文件一样,这也将扩展BaseTest.java。
步骤2.在此类中创建测试方法testUsingArrowKeys(),并使用@test注解对其进行注解。
步骤 3.该测试用例的第一步也与前一个类似,即调用BaseTest.java的navigatorToGoogleAndSearch()方法导航到测试网站并获取搜索输入项的自动建议列表。
步骤 4.正如已经提到的,在这种方法中,我们没有任何指定的术语可以从自动建议列表中选择。我们将使用按键操作来按下键盘按钮以到达列表中的第二项。
4.1)驾驶员的初始位置将是搜索输入框。将对其执行键盘操作。这就是为什么代码上的 Web 元素引用是该框的定位器。
4.2)现在,要到达列表中的第一个值LambdaTest,我们需要按向下箭头键。此时i 的值 = 1。
4.3)此后, i的值增加到 2,这对于再次执行循环是有效的。再次按下键盘向下箭头键可到达下一个值lambdatest noida。
4.4)在这一步, i的值= 3 ,循环继续的条件失败。这意味着驾驶员焦点已达到所需的元素。
步骤 5.再次使用“按键”操作在此值上按 Enter 键并到达搜索结果页面。
步骤 6.使用ExpectedConditions在WebDriverWait对象的帮助下等待搜索结果页面加载。
步骤 7.加载搜索结果页面后,从页面中获取搜索词值。
断言该值包含初始给定的搜索词。
这里需要注意的重要一点是,与最后一个测试用例不同,我们不会断言完全匹配的术语,因为代码没有通过匹配从自动建议列表中选择特定值。
执行此测试用例时,您将得到如下输出。
探索我们比较Protractor 与 Selenium 的深入指南,以便为您的测试自动化需求做出明智的决策。获得有关这些广泛使用的测试框架的主要差异、优势和理想用例的宝贵见解。
使用网络抓取处理 Selenium 中的自动建议:Google
这种方法与第一种方法类似,即使用整个自动建议列表来比较并选择所需的搜索词。它的不同之处仅在于我们访问列表并从自动建议列表中获取值的方式。这种方法使用了网页抓取技术。
网络抓取是从网站自动提取数据的过程。它涉及编写一个程序来获取网页、解析 HTML 内容并提取所需的信息。网络抓取可以收集数据以进行分析、研究或自动化,但应遵守网站条款和法律法规。
让我们看一下下面的文件,以更好地了解如何使用网络抓取来处理 Selenium 中的自动建议。
package test;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.testng.Assert;
import org.testng.annotations.Test;
import base.BaseTest;
public class TestUsingWebScrapping extends BaseTest {
@Test
public void testUsingWebScraping_Google() {
String expectedSearchTerm = "lambdatest careers";
navigateToGoogleAndSearch();
// Fetch the list of all suggestions
System.out.println("Fetching the web element list for all suggestions");
WebElement autoSuggestionListBox = driver.findElement(By.xpath("//*[@role='listbox']"));
List<WebElement> autoSuggestionList = autoSuggestionListBox.findElements(By.xpath(".//li"));
// scrape the autoSuggestionList to get each suggested term for given search
// term.
System.out.println("<-------- Started Web scraping for suggestion list -------->");
for (WebElement listTerm : autoSuggestionList) {
WebElement term = listTerm.findElement(By.xpath(".//span"));
System.out.println("Auto Suggestion Value : " + term.getText());
if (term.getText().equalsIgnoreCase(expectedSearchTerm)) {
System.out.println("\nFound required value in auto-suggestion list. Clicking on it now\n");
term.click();
break;
}
}
// wait for the search results page to load and verify if it has the same term as we
// expected.
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@type='search']")));
Assert.assertEquals(driver.findElement(By.xpath("//*[@type='search']")).getText(), expectedSearchTerm,
"Valid Search result page.");
System.out.println("Reached to google search result page for : " + expectedSearchTerm);
}
}
代码演练
步骤 1.添加一个新的 java 测试文件TestHandleAutoSuggestions_UsingWebScrapping,并将BaseTest.java扩展到它。
步骤2.添加第一个测试用例testUsingWebScraping_Google () ,并使用TestNG的@test注解进行注释。
步骤3.与前面案例中的步骤类似,我们定义一个预期的搜索词,并调用BaseTest.java的navigateToGoogleAndSearch()方法导航到Google并输入搜索词。
步骤 4.这是使用网页抓取方法时最重要的步骤。
4.1)首先,我们需要识别包含整个自动建议列表的主容器 Web 元素。
下面的屏幕截图显示它位于属性为role=”listbox”的< ul >标签内。
4.2)该元素内部是所有自动建议元素的列表。我们需要使用上一步中的容器元素引用来获取它。
步骤 5.此 Web 元素列表托管相关的自动建议值数据。它存在于这些元素的 <span> 标记内。
5.1)我们首先使用 for 循环遍历此列表以获取每个元素所需的数据。
5.2)对于每个元素,使用 <span>标签来获取值。记录自动建议值以便更好地进行调试。
5.3)将其与预期的搜索词进行比较。如果匹配,则单击它并中断循环,如果不匹配,则继续该过程。
步骤 6.选择搜索词后,等待搜索结果页面加载并验证其是否与预期结果匹配。这与我们在之前的测试场景中所做的类似。
使用网络抓取执行上述用于在 Selenium 中处理自动建议的测试用例将给出如下所示的输出
提升您的移动应用程序的性能!发现经过验证的移动性能测试策略。提高用户满意度和排名。快速获得结果。
奖励:使用网络抓取处理 Selenium 中的自动建议:亚马逊
与上一个测试场景一样,此测试场景也使用网络抓取来处理自动建议列表并选择所需的术语。在本教程中,我们以流行的电子商务网站亚马逊为例,了解自动建议在电子商务平台上的工作原理。
可以将类似的策略添加到您网站的测试自动化脚本中。您应该注意,网站的设计或产品的可用性可能会发生变化。在这种情况下,您只需更改搜索词,代码将继续正常运行。
For this, add a new test case to the same file, *TestUsingWebScrapping.java*, and name it *testUsingWebScraping_Amazon()*.
@Test
public void testUsingWebScraping_Amazon()
{
String expectedSearchTerm = "samsung galaxy s22";
// to navigate to the website and enter search term
System.out.println("Navigating to the website");
driver.get("https://www.amazon.com");
System.out.println("Entering search term as : samsung galaxy s");
driver.findElement(By.id("twotabsearchtextbox")).sendKeys("samsung galaxy s");
// explicit wait to wait for the auto suggestions list to be present
wait = new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@class='left-pane-results-container']")));
System.out.println("Auto-suggestions list found");
// Fetch the list of all suggestions
System.out.println("Fetching the web element list for all suggestions");
WebElement autoSuggestionListBox = driver.findElement(By.xpath("//*[@class='left-pane-results-container']"));
List<WebElement> autoSuggestionList = autoSuggestionListBox.findElements(By.xpath(".//div[@class='s-suggestion-container']"));
// scrape the autoSuggestionList to get each suggested term for a given search term.
System.out.println("<-------- Started Web scraping for suggestion list -------->");
for (WebElement listTerm : autoSuggestionList) {
WebElement term = listTerm.findElement(By.xpath(".//div"));
System.out.println("Auto Suggestion Value : " + term.getText());
if (term.getText().equalsIgnoreCase(expectedSearchTerm)) {
System.out.println("\nFound required value in auto suggestion list. Clicking on it now\n");
term.click();
break;
}
}
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[contains(@cel_widget_id,'MAIN-SEARCH_RESULTS')]")));
//scraping the search results page to get the price of required product
List<WebElement> productDetails = driver.findElements(By.xpath("//*[contains(@cel_widget_id,'MAIN-SEARCH_RESULTS')]"));
for(WebElement product : productDetails) {
WebElement productName = product.findElement(By.xpath(".//h2"));
WebElement productPrice = product.findElement(By.xpath(".//*[@class='a-price']"));
System.out.println("Product Name: " + productName.getText());
if(productName.getText().contains("Ultra 5G S908U")) {
System.out.println("\nFound Required Product");
System.out.println("Required Product Price : " + productPrice.getText());
break;
}
}
}
代码演练
步骤1.添加一个新的测试用例testUsingWebScraping_Amazon(),并使用@test注释对其进行注释。
步骤 2.将预期的搜索词存储到一个变量中,该变量将用于稍后从自动建议列表中进行比较和选择。
步骤 3.导航到 Amazon.com 并输入搜索词samsung Galaxy s,然后等待自动建议列表加载。
要验证自动建议下拉列表是否已加载,您可以等待 Web 元素出现相同的内容。
步骤 4.再次使用相同的定位器,我们将 Web 元素引用存储到变量中。这是指主容器 Web 元素,它在子标签中具有自动建议列表。
步骤 5.使用容器 Web 元素获取此元素中< div >标记内存在的所有自动建议相关数据的列表。
我们在这里使用XPath 定位器作为标签及其类属性。
步骤 6.使用网页抓取方法从上一步获取的网页元素列表中获取相关的自动建议值。为此,再次找到保存此信息的子 < *div *> 标记,并为每个元素打印它。
6.1)仅在循环内部,将自动建议值与预期产品名称进行比较。如果匹配,请选择相同的以查看所有相关产品的详细列表。
您应该会看到如下所示的有关选择产品的页面。
步骤 7.再次使用显式等待对象,通过 ExpectedConditions 等待页面加载完成。
步骤 8.在此页面上再次实施网页抓取方法。这次,我们抓取整个页面以获取所需产品的名称和价格。
8.1)获取包含所有这些信息的 Web 元素定位器,并将其存储在列表中。
8.2)抓取该元素内的信息以根据要求获取产品名称和价格。产品名称位于 < h2 > 标签内,价格位于具有值 class = 'a-price' 的 class 属性的标签内。
8.3)使用if条件检查产品名称是否包含所需的型号。如果是,则打印价格,如果不是,则继续下一个元素,直到处理完所有产品元素。
执行此自动化脚本来处理亚马逊上的产品搜索自动建议,并使用网络抓取获取匹配产品的价格,您将获得如下所示的输出。
本指南重点介绍测试自动化指标、其重要性、策略、挑战以及衡量成功的关键测试自动化指标。
结论
这使我们得出了关于处理 Selenium Java 自动化中的自动建议以创建健壮且可靠的自动化的博客的结论。我们详细了解了自动建议、它们可能带来的挑战以及如何处理它们。通过使用显式等待、验证建议、处理建议加载时间等,可以在自动化中成功处理自动建议。现在是时候开始使用 Selenium 自动化在测试网站上处理自动建议了。
- 点赞
- 收藏
- 关注作者
评论(0)