您可能已经观察到,在Google上搜索或通过电子商务平台浏览时,自动建议在开始键入时几乎立即出现。这些建议被称为自动烟,旨在根据您的输入为潜在相关的关键字和顶级搜索提供快速指南。当您在搜索框中输入时,网站会列出自动搜索列表,以帮助您完善您的搜索并快速访问相关信息。
自动化网站与Selenium的交互以处理自动烟,因为这些建议的动态性质会带来挑战。与网页上的静态文本不同,自动搜索形式不断变化,适应用户提供的输入。
此博客深入研究了web automation在Selenium Java中处理自动烟的复杂性。我们将探索不同的技术,以在Web自动化脚本中自动化这些建议,同时获得对自动探索动态的宝贵见解。此外,我们将解决自动化过程中的潜在挑战。
在此博客结束时,您可以在硒中处理自动解决方案,您将能够使用不同的技术来处理自动搜索并在自动化脚本中实现它们。因此,让我们开始探索自动烟的世界!
什么是自动烟?
自动解决方案或自动完成功能根据用户在搜索框或网页上的任何其他输入字段中的输入提供了潜在的建议。这些建议旨在帮助用户查找相关信息或更有效地完成其输入。
这些将作为下拉列表实现,随着用户进行输入,其中包含可能的建议列表。这可以帮助用户从列表中选择所需的项而无需完全输入。
建议的动态列表随用户输入而变化,由AJAX(异步JavaScript和XML)请求促进。这样可以确保他们输入的无缝用户体验,并在后台从服务器或API提取建议。
另外,通过我们的广泛指南了解test execution engines的来龙去脉,并通过自动化增强测试工作流程。 >
自动探索非常有用,因为它们依靠Ajax查询来提前提供相关选项,这有助于缩短搜索术语所需的时间。这些自动探索在电子商务和金融科技领域中还具有广泛的应用,促进了快速产品搜索并帮助列出所有相关的产品。
本详细的指南说明了如何检测flaky tests,其原因,减少片状的策略等等。
自动探索的优势
自动搜索或预测性搜索,通过使用AJAX请求进行更快的搜索来改善用户体验,从而提供了一些好处。以下是一些使自动解决方案成为任何网站上流行策略的优势。
-
增强用户体验
-
提高搜索效率
-
由于自动校正而引起的更高精度
-
移动友好的体验
发现TestRunner如何改变自动测试的世界。探索其关键特征和好处。今天使用TestRunner改进测试过程。
处理硒中自动探索的挑战
自动探索为增强性能提供了重要的优势,因为它们提供了有关网站主题的相关信息,而无需加载整个内容。这有助于节省用户的时间和精力,以浏览网站上的所有内容。
但是,内容是动态的;因此,我们需要使用正确的自动化方法来处理动态因素。此外,加载结果可能需要时间取决于外部因素(尤其是互联网速度)。在处理Selenium automation中的自动探测时,这变得具有挑战性。让我们看一些在Selenium Java testing中处理自动烟之前的常见挑战。
- 延迟自动烟列表
自动烟雾列表取决于异步调用以显示结果。有时,如果硒试图立即与之互动,并且建议列表可能尚未充分加载,这可能会导致时间问题。这也可能是由于test environment中的互联网连接而发生的。
- 高度动态的内容
自动探测是根据搜索词动态生成的。即使是同一搜索词的最小变化,例如添加额外的空间或任何其他字符也可以更改列表中的建议。如果使用特定的Web元素定位器,则在使用Selenium Automation时变得具有挑战性。
使用我们的免费Android emulator online,在任何移动操作系统上测试本机,混合和Web应用程序。注册以优化应用程序性能。
处理硒中自动烟的最佳实践
要克服上面讨论的挑战,并在硒稳健中处理自动探测,我们在编写自动化测试时遵循许多实践。这是我们将在下一个演示部分中遵循的一些最佳实践。
- 使用显式等待
如前所述,挑战中提到的自动搜索列表可能会在加载方面遇到延迟,如果硒脚本试图立即与之互动,则可能会导致故障。为了解决这些问题,强烈建议您在与之互动之前等待自动解决方案列表充分加载。 Explicit waits in Selenium对于处理这种情况特别有价值。
显式等待和ExpectedConditions in Selenium使自动化测试在继续之前等待某个元素。在我们的用例中,此Web元素将是自动搜索列表。
- 唯一的Webelement定位器
如果不使用适当且独特的网络元素定位器,在硒中处理自动探测可能会成为一场噩梦。这是因为它们是高度动态的,并且Web元素定位器可能会根据输入进行更改。
因此,建议使用独特的定位器,例如ID,名称或类,这些定位器很少更改并有助于与列表进行交互,而与搜索输入项无关。另外,请务必记住不要在其中使用任何此类locator strategies与搜索词参考使用,因为该术语可能会在每次运行中有所不同,并且会使定位器过时。
- 验证建议值
要从“自动搜索”列表中选择正确的项,您应始终在选择该值之前验证该值以达到结果页面。进行此比较时,请考虑使用案例不敏感的方法,因为不同的自动探索运行的结果可能会有所不同。
Selenium assertions可用于验证结果页面上的搜索词与预期值相似。
- 使用键盘事件
处理硒自动化中自动烟的最常见方法之一是使用keyboard events,例如箭头键和输入按钮。建议在自动化情况中从列表中选择第一个或第二个元素而不比较值。
在上面的代码段中,您可以看到我们要单击列表中的第二个元素。同样,也创建了一个用于使用sendKeys() method in Selenium的箭头向下按下箭头的循环。
一旦到达列表中所需的元素,对于循环中断,Sendkeys()方法将再次使用Enter按钮选择该选项。
为此,我们还可以使用ActionsChains in Selenium Java使用动作类创建一系列动作。这有助于执行低级鼠标动作,例如使用WebDriver实例进行单击,拖动,徘徊或键盘操作。
在此博客中,我们仅介绍用于处理Selenium Java中自动解决方案的Sendkeys()方法实现。这是因为在这种情况下,不需要动作链,因为我们只有两个快速的关键操作。
因此,我们了解了有助于处理硒中自动烟的挑战和最佳实践。让我们看一些如何在硒Java自动化项目中使用的实践实现。
提升您的Mobile App Test质量:在lambdatest云上充分利用您的移动应用程序测试和测试,以进行全面的测试,错误检测等。
示范:在Selenium Java中处理自动抢断
为了演示处理硒自动化中自动烟的最佳方法,我们将使用maven和testng创建一个Java项目,并使用Selenium 4.
以下测试方案将在此博客中自动化,以帮助了解到目前为止讨论的所有方法和最佳实践。
测试方案1(通过获取自动烟雾列表来处理硒中的自动烟)
-
输入 lambdatest 作为搜索框中的搜索词。
-
等待可用的自动遇到列表。
-
获取所有自动搜索的引用,并存储在类型WebElement的列表变量中。
-
启动一个循环以从列表中遍历每个韦伯。
-
比较自动烟与所需术语是否匹配。
-
如果与之匹配,请单击并打破循环,选择相同的方法。否则,请继续直到列表结束等待搜索结果页面加载。
-
断言结果页面上的搜索词与是否相同。
测试方案2(使用sendkeys())
在硒中处理自动搜索-
输入 lambdatest 作为搜索框中的搜索词。
-
等待可用的自动遇到列表。
-
通过单击向下箭头键开始循环以从自动搜索列表中达到第二个建议。
-
单击此术语输入。
-
等待搜索结果页面加载。
-
断言结果页面上的搜索词包含最初给出的搜索关键字。
测试方案3(使用网络刮擦处理硒中的自动烟:google)
-
输入** lambdatest **作为搜索框中的搜索词。
-
等待可用的自动遇到列表。
-
获取webelement引用对自动搜索的列表,并将其存储在变量中。
-
从“自动搜索”列表中启动一个循环以刮擦(或废除)每个学期的建议数据。
-
比较Web刮擦的列表数据是否与所需的术语相匹配。
-
如果与之匹配,请单击并打破循环,选择相同的方法。否则,继续直到列表结束
等待搜索结果页面加载。 -
断言结果页面上的搜索词是否与预期。
自动化Cypress testing并使用lambdatest执行浏览器自动化测试。我们的云基础架构具有3000多个桌面和移动环境。免费尝试!
项目设置
在此博客中,Eclipse IDE用于创建项目。您也可以选择自己选择的其他任何IDE。
对于此博客中的所有测试方案,正在使用相同的项目设置。我们不断在新的测试文件中为每种情况添加新的test cases。因此,请仔细在计算机上的设置以避免在执行阶段发生任何错误。
此博客中展示的所有测试方案都是Selenium Web自动化脚本。我们将在cloud Selenium Grid上执行它们。使用硒云网格可提高速度和可扩展性,并使automation testing更快,更可靠。它还允许在各种浏览器和操作系统上执行多种情况。
为了实现同样的效果,该博客正在使用lambdatest cloud硒网格。 Lambdatest是一个由AI驱动的测试编排和执行平台,可让用户能够在大量3000多个真正的浏览器,设备和操作系统组合中为Web和移动应用程序进行Java automation testing。
查看有关如何使用Selenium testing with Java on LambdaTest开始的文档。
此外,它还提供了各种automated testing tools和诸如Selenium,Cypress,Playwright和Appium之类的框架,从而有效地执行了测试用例。
步骤1。启动Eclipse IDE并创建一个新的Maven项目, andlingAutoSuggestionsSelenium 。。
步骤2。在SRC软件包中添加2个新软件包,并将它们命名为 base *和 *test 。
步骤3。该文件将具有所有测试用例的通用代码,例如初始化WebDriver,浏览器交互以及对自动遇到列表的初步搜索。
步骤4。在测试包下添加3个Java类文件。这些将具有我们不同测试场景的代码。
一旦完成了所有这些步骤,项目结构应该看起来像这样:
当我们使用硒和TestNG进行项目时,在pom.xml中添加硒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");
}
}
本指南探讨了Digital Transformation,其优势,目标,重要性和数字化转型涉及的挑战。
代码演练
*步骤1. **创建一个 *remotewebdriver 的对象,并将其初始化为 null 。
。另外,创建一个 webdriverwait 的对象,该对象将在后期阶段使用以实现明确的等待。此等待对象将允许代码等待给定时间,直到实现给定的条件之前。
步骤2。从LambdaTest Password & Security部分获取您的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 Cloud Selenium Grid属性的WebDriver初始化的代码。用 @beforetest annotation in TestNG对此进行注释以在每个测试执行之前执行。
*步骤4. **创建一个 *Safarioptions 类的对象。这将有助于设置执行测试所需的浏览器属性。使用此操作,设置OS和浏览器版本。
步骤5。使用a hashmap 类型变量来指定lambdatest平台要求的其他浏览器功能,以支持其Selenium Cloud Grid上的测试执行。这将有助于使用构建名称和其他详细信息在仪表板上识别测试结果。
我们还可以通过导航到Automation Capabilities Generator来获取Lambdatest平台所需的浏览器功能。这有助于提供可用的浏览器功能可用于执行中的浏览器功能的现成代码。
步骤6。最后,使用Selenium RemoteWebDriver使用包含所有指定浏览器功能的凭据和Safarioptions对象连接到Lambdatest远程网格。
步骤7。添加一种新方法,拆卸(),并用 @aftertest 对其进行注释。每个测试执行后将调用以关闭浏览器并终止Web驱动程序会话。
步骤8。最后,我们将最后一个实用方法添加到此基本文件,其中包含每个测试场景的常见步骤。
8.1)使用 driver.get()方法导航到正在测试的网站。
8.2)获取搜索输入框的Web元素并输入搜索词。
我们在这里使用 *名称 *定位器来找到此Web元素。
8.3)实例化了我们最初创建的 WebDriverWait 类对象,最长时间等待任何条件为10秒。这将在给定时间内阻止网络驱动器,以防止其执行任何进一步的操作并在情况下完成障碍。
8.4)使用此等待对象,我们在Selenium中实现了预期条件,该对象告诉驾驶员等待给定的Web元素可见。在这种情况下,我们在继续使用不同的方法之前等待可见自动搜索列表。
到目前为止,哪个是2023年最想要的Automation testing tools,到目前为止爬上了梯子的顶部?让我们看看。
使用自动烟列表在硒中处理自动烟
首先,也是最常用的方法来处理Selenium Automation脚本中的自动探测方法是遍历整个自动烟雾列表,并比较值以选择所需的值。当我们已经知道我们正在寻找的确切搜索词并且不希望选择任何随机搜索词时,这将非常有用。
至关重要的是要记住,根据地理位置,相同的搜索查询将提供不同的自动探索列表。之所以发生这种情况,是因为同一术语在不同的地方可能具有不同的参考,或者偶尔可能是指一个地方的某些东西,而在另一个地方则没有产生结果。因此,请小心,并在应用此策略时确定测试案例的准确搜索词。
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步。在测试包下添加一个新的Java文件, TestUsingSuggestionsList 。此类将扩展 basetest.java 从中继承常见的方法和变量。
步骤2。
步骤3。
*步骤4。可见的建议列表。 步骤5。接下来,我们使用Web元素定位器获取所有自动搜索选项的列表,然后将它们存储在变量中。 下面的屏幕截图表明我们使用 reque 属性来获取整个列表。它给出了总数的总数,并且可以在代码中单独访问。 步骤6。启动一个循环以遍历此建议列表并从中获取值。我们首先记录找到的每个值,然后将其与实际预期术语进行比较。 如果两种匹配,则停止循环,并单击该特定的自动搜索值。如果不是匹配,我们将继续循环。 步骤7。
我们再次使用相同的 webdriverwait 对象,但是这次实现了预期条件在结果页面上等待其他元素。 步骤8。最后,断言此页面上的搜索词与预期的搜索词匹配。您可以通过assertions in TestNG的此博客了解更多有关它的信息。 执行此测试案例将为您提供如下的输出: 在LambdaTest Dashboard上的执行日志,因为这看起来像以下内容。您可以注意到所有自动遇到的列表值都被获取。
在自动化tðµsting上的Thðµlatðµst教程上不要错过!订阅Sеlеnium tеsting,Playwright testing等的ThðµLambdaTеst YouTubе Channеl进行教程。 在此博客上的mobile automation testing工具中,我们列出了具有优势和业务友好功能的最佳11个移动自动化测试工具。 ,当我们没有选择预定义的目标搜索词时,使用键盘键操作在硒中处理自动烟的方法很有用。它仅在仅处理自动搜索列表并选择一个术语的情况下使用它是我们的硒测试用例的要求。 步骤1。在同一软件包中添加一个新的Java测试文件,并将其命名 testHandLeautoSuggestions_usingeKeyactions。就像以前的测试文件一样,这也将扩展 basetesteast .java。 步骤2。在此类中创建测试方法, testusingerarowkeys(),并用 @test69 注释进行注释。 步骤3。此测试案例的第一步也将类似于上一个,即呼叫 navigateTogOogLeanDSearch() basetest的方法。
步骤4。如前所述,在这种方法中,我们没有任何指定的术语可以从自动烟列表中进行选择。我们将使用密钥操作按下键盘按钮以从列表到达第二项。 4.1)驱动程序的初始位置将是搜索输入框。将对键盘操作执行。这就是为什么代码上的Web元素引用是此框的定位器。 4.2)现在,要从列表中达到第一个值, lambdatest ,我们需要按下箭头向下键。此时的值 i = 1 。 4.3)在此之后, i 的值将增加到2,这是有效的,可以再次执行循环。再次按下键盘向下箭头键,以达到下一个值, lambdatest noida 。 4.4)在此步骤中, i = 3 的值以及循环继续失败的条件。这意味着驾驶员焦点已达到所需的元素。 步骤5。再次使用键操作,再次按此值上的Enter键并到达搜索结果页面。 步骤6。
步骤7。
断言此值包含初始给定的搜索词。 这里要注意的一个重要点是,与上一个测试案例不同,我们不会主张确切的匹配术语,因为代码没有通过匹配来从自动搜索列表中选择特定值。 在执行此测试案例时,您将获得如下的输出。 探索我们比较Protractor vs Selenium的深入指南,以根据您的测试自动化需求做出明智的决定。对这些广泛使用的测试框架的关键差异,优势和理想用例获得有价值的见解。 > 此方法类似于第一种方法,即使用整个自动搜索列表来比较并选择所需的搜索词。它仅在我们访问列表和从自动搜索列表中获取值的方式有所不同。这种方法使用网络刮擦的技术。 Web scraping是自动从网站提取数据的过程。它涉及编写一个程序来获取网页,解析HTML内容并提取所需信息。 Web刮擦启用收集数据以进行分析,研究或自动化,但应遵守网站条款和法律法规。 让我们查看以下文件,以更好地了解如何使用网络刮擦来处理硒中的自动烟。 步骤1。添加一个新的Java测试文件, testhandleautosuggestions_usisterwebscrapping ,然后扩展 basetest.java 。 第2步。添加第一个测试案例' testingwebscraping_google(),并用 @test 注释将其注释testng。 步骤3。输入搜索词。 步骤4。
4.1)首先,我们需要确定存在整个自动烟雾列表的主要容器Web元素。 下面的屏幕截图显示它在a 4.2)此元素内部是所有自动探索元素的列表。我们需要使用上一个步骤中的容器元素引用来获取此内容。 步骤5。此Web元素列表托管相关的自动搜索值数据。它存在于这些元素的标签中。 5.1)我们首先遍历此列表以使用for for loop for每个元素获取所需的数据。 5.2)对于每个元素,使用 span >标签获得值。记录自动遇到的值以进行更好的调试。 5.3)将其与预期的搜索词进行比较。如果与之匹配,请单击它并打破循环,如果不继续该过程。 步骤6。选择搜索词后,等待搜索结果页面加载并验证它是否匹配预期结果。这与我们在以前的测试方案中所做的类似。 执行上述测试案例,用于使用网络刮擦处理硒中的自动探测,将提供像下面的输出 提高您的移动应用程序的性能!发现Mobile Performance Testing的经过验证的策略。提高用户满意度和排名。快速获取结果。 就像最后一个测试方案一样,此情况还使用Web刮擦来处理自动搜索列表,然后选择所需的术语。在此中,我们以受欢迎的电子商务网站亚马逊的示例了解在电子商务平台上的自动探索工作。 可以将类似的策略添加到您的网站测试自动化脚本中。您应该注意网站的设计或产品的可用性可能会发生变化。在这种情况下,您只需要更改搜索词,并且代码将继续正常运行。 步骤1。添加一个新的测试用例 testausingwebscraping_amazon(),并用 @test 注释进行注释。 步骤2。
步骤3。
要验证自动遇到的下拉列表已加载,您可以等待Web元素,以便存在。 步骤4。再次使用同一定位器,我们将Web元素引用到变量。这是指的是主要的容器Web元素,该元素在子标签中具有自动烟列表。 步骤5。使用容器Web元素获取此元素中 我们在此处使用XPath locator作为标签及其类属性。 步骤6。使用Web刮擦方法从最后一步中获取的Web元素列表中获取相关的自动搜索值。为此,再次找到孩子< *div *>标签,该标签容纳此信息,并为每个元素打印。 6.1)仅在循环内,将自动烟值值与预期的产品名称进行比较。如果匹配,请选择相同的内容以查看所有相关产品的详细列表。 您应该在选择产品时看到下面的页面。 步骤7。再次使用显式等待对象,以等待页面加载使用预期条件完成。 步骤8。在此页面上再次实现Web刮擦方法。这次,我们刮擦整个页面以获取所需产品的名称和价格。 8.1)获取包含所有这些信息的Web元素定位器,并将其存储在列表中。 8.2)刮擦此元素内部的信息,以根据要求获取产品名称和价格。产品名称存在于 h2 >内部的标签和价格中的标签中,带有一个class属性 class = a-price。 8.3)使用IF条件检查产品名称是否包含所需的型号。如果是,请打印价格,如果不继续到下一个元素,则直到处理所有产品元素。 执行此自动化脚本以处理亚马逊上的自动搜索,以进行产品搜索,并使用网络刮擦获得匹配产品的价格,您将获得下面的输出。 本指南重点介绍了test automation metrics,其意义,策略,挑战和钥匙测试自动化指标以衡量成功。 这使我们得出了有关处理Selenium Java Automation自动探索的博客的结论,以创建强大而可靠的自动化。我们了解了有关自动探索,可能构成的挑战以及如何处理它们的详细信息。可以通过使用明确的等待,验证建议,处理建议的加载时间等,可以成功地自动处理自动解决方案。现在是时候开始使用Selenium Automation在测试网站上处理自动烟。
使用sendkeys()在硒中处理自动探测
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");
}
}
代码演练
使用网络搭配处理硒中的自动烟:google
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);
}
}
代码演练
带有属性的标签内部 prole ='listboxâ。
奖励:使用网络剪贴即可处理硒中的自动抢断:亚马逊
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;
}
}
}
代码演练
结论