如何用Java在Selenium WebDriver中选择多个复选框?

513 阅读11分钟

{ "@context":"schema.org", "@type":"FAQPage", "mainEntity":[{ "@类型":"问题", "名称":"我如何用键盘选择所有的复选框?", "acceptedAnswer":{ "@type":"答案", "文本":"要选中或取消一个复选框,使用tab键将指针移到该复选框上,然后点击键盘上的空格键。空格键就可以了。一旦焦点在复选框上,按空格键来检查或取消复选框(通过点击Tab键)。" },{ "@type":"问题", "名称":"我如何在Chrome中选择多个复选框?", "acceptedAnswer":{ "@type":"答案", "文本":"只需点击和拖动,就可以一次选中或取消众多复选框。允许你通过点击和拖动快速检查许多复选框,或者通过使用ALT+点击和拖动区域选择更快。" } },{ "@类型":"问题", "名称":"什么是Selenium的isEnabled?", "acceptedAnswer":{ "@type":"答案", "文本":"这个方法检查一个元素是否被启用。如果该元素被启用,则返回一个真值。如果不是这样,它返回一个假值。下面的代码检查一个具有下一个id属性的元素是否被启用。" } }] }

{ "@context":"schema.org/", "@type":"BreadcrumbList", "itemListElement":[{ "@type":"ListItem", "position":1, "名称":"首页", "项目":"www.lambdatest.com/" },{ "@type":"ListItem", "position":2, "name":"博客", "项目":"www.lambdatest.com/blog/" },{ "@type":"ListItem", "position":3, "name":"如何用Java在Selenium WebDriver中选择多个复选框?", "项目":"www.lambdatest.com/blog/how-to…" }] }

你有没有想过,如果你每次想查看你的Facebook资料时都要登录,那会是多么令人沮丧的事?或者在一道多选题中,你想标出很多选项却不能标出? 或者在每次付款时都要输入你的银行卡信息,因为你不能保存它?

这些只是网页上众多快速功能可能有用的情况中的几个。通过简单的点击,可以保持一段时间的登录状态,保存卡的详细信息,以及更多。基本上,这是一种打开和关闭东西的技术,同时也允许多选。

在网络开发的世界里,这个问题的答案是复选框。复选框在网页上有广泛的应用,并帮助用户在各种应用中给予同意/切换或选择多种选择。

随着复选框使用量的增加,作为一名自动化工程师,人们希望你知道如何使用Selenium等测试自动化框架来处理复选框。

在这个Selenium Java教程中,我们将讨论如何在Selenium WebDriver中使用Java实现自动化和如何选择多个复选框的各种技术。

目录

什么是复选框?

复选框是任何网页上的GUI元素,便于用户从给定的选项集中做出选择。一旦做出选择,它就会帮助记录,以便进一步处理。

复选框可以让用户做出。

  • 从选项列表中做出单一选择
  • 从选项列表中做出多个选择
  • 对网页上的某些要求给予同意(或切换开/关)。

在实施过程中,一个复选框被认为有两种状态。

  • 当它被选中时,它被称为 "选中"。
  • 当它被取消选择时,它被称为 "未选中"。

值得注意的是,有些应用程序还提供了一种中间状态,也称为三状态,即用一个填充的方框或一个破折号来代替通常表示选中的Checkbox的勾号,来表示选择。这发生在我们有父子复选框的情况下,一个子复选框被选中后会对层次结构中的所有父复选框进行自动选择。

Checkbox is said to have two states

网页中的复选框

复选框在网页中主要用于向用户提供多种选择。在HTML页面中,这些复选框可以通过几个独特的属性来识别,这些属性可以用来使用Selenium WebDriver实现复选框的自动化。

DOM中的复选框是用类型为复选框的输入标签定义的,如下所示。

<input type="checkbox">

由于这种实现,所有的网络元素定位策略都可以用来定位Selenium WebDriver中的复选框并使其自动化。

如何在Selenium WebDriver中定位多个Checkbox?

在我们讨论如何使用Java在Selenium WebDriver中选择多个复选框以及自动化中复选框的实现部分之前,最好先了解在网页中定位复选框的不同方法,以及一旦找到复选框,我们如何选择它。

使用ID属性定位Checkboxes

Selenium中使用ID定位器时,在大多数设计良好的网页中,所有的HTML标签都分配了一个ID值。因此,如果正在交互的复选框有一个与之相关的ID,那么我们就可以使用这个唯一的值来与复选框进行交互。

Locating Checkboxes using the ID attribute

至于这里的复选框,其id值已经被分配了。所以它可以被定位,如下所示。

WebElement checkbox = driver.findElement(By.id("isAgeSelected"));

使用类名定位复选框

Selenium中的className定位器可用于有一组复选框的情况,并且每个复选框都需要被交互,因为同一组的元素都属于同一个类名。

因此,通过这种方式找到的复选框被存储在WebElements的列表中,可以使用列表中的索引进行交互。

Locating Checkboxes using the Class Name

从上面的例子中可以看出,所有的复选框都在同一个组中。因此,它们有相同的类名。

它们可以被定位,如下图所示。

List<WebElement> checkboxes = driver.findElements(By.className("cb-element mr-10"));

使用元素值定位复选框

复选框可以使用它们的Value属性来定位,因为复选框有一个唯一的值分配给它。这种策略主要用于复选框在一个组中的情况。因此,它们都有相同的Class或Name属性与之相连,同时有一个独特的Value,有助于与特定的Checkbox进行交互。

Locating Checkboxes using the element Value

这是一个例子,所有不同的值都有相同的类。我们可以使用所有复选框的Value属性来唯一地识别它们。

List<WebElement> checkboxes = driver.findElements(By.xPath("//input[@name='color']"));

	for(int i=0; i<checkboxes.size(); i++)        
    {   
String value = checkboxes.get(i).getAttribute("value");

if (value.equalsIgnoreCase("orange"))
   
{       
	//perform action on checkbox which have value as orange
	break;
 }
}

使用CSS选择器或XPath定位复选框

有时,直接使用一个元素的属性来定位它在网页上的位置并不容易。复选框的情况也是如此。有时,在DOM中实现使用唯一的标识符,甚至像我们之前讨论的那样使用值属性来选择它们,是不可行的。

在这种情况下,使用CSS选择器XPath选择器来定位复选框成为最理想的方式。

//locating a checkbox using XPath
WebElement checkbox = driver.findElement(By.xpath("//input[@id='isAgeSelected']"));
	
//locating a checkbox using CSS Selector
WebElement checkbox = driver.findElement(By.cssSelector("input[id='isAgeSelected']"));

我们已经深入研究了定位复选框的不同方法。在下一节中,我们将学习如何用Java在Selenium WebDriver中选择多个Checkbox。

如何用Java在Selenium WebDriver中选择多个Checkbox?

让我们来看看你可以通过哪些机制与复选框互动。

Selenium WebDriver中的复选框可以通过使用Selenium WebDriver的**click()**方法简单地点击它来选择/勾选或取消选择/取消勾选。

一旦一个复选框被找到,我们只需点击它就可以改变其状态。

WebElement checkbox = driver.findElement(By.id("isAgeSelected"));
checkbox.click();

如果一个复选框处于未选中的状态,那么点击就会将其转换为选中状态,反之亦然。

How to select multiple Checkboxes in Selenium WebDriver using Java

使用Selenium WebDriver对复选框进行验证

通过验证复选框,我们指的是在对复选框执行Click()操作之前和之后验证复选框的状态。为此,Selenium WebDriver提供了几个函数,可以在处理多个Checkboxes时使用。

**isSelected()**方法用于验证复选框的当前状态,不管它是否被选中。按照类似的思路,在点击之前,我们可能需要检查复选框是否不仅显示,而且还能进行交互。Selenium中的 **isEnabled()**和isDisplayed()方法分别用于检查网页上的复选框是否被显示和启用。

这里需要注意的是,**isDisplayed()isEnabled()**方法属于预验证,因为它们是在点击复选框之前使用。**isSelected()**方法属于前验证和后验证,因为它有助于在执行点击操作前后验证复选框的状态。

在3000多个浏览器和操作系统上运行你的Selenium Java测试脚本。现在就试试LambdaTest吧!

示范。使用Java在Selenium WebDriver中自动处理多个复选框

到目前为止,我们已经了解了定位、选择和验证复选框的不同方法。在本文关于如何使用Java在Selenium WebDriver中选择多个复选框的部分,让我们看看Selenium WebDriver方法如何用于与页面上的复选框进行自动化交互。我将使用Selenium的Java绑定来进行演示。在我们开始之前,有几件关于自动化测试例子的事情需要注意。

  • 我们将在EclipseIDE中使用Java创建一个Maven项目
  • 它将使用Selenium WebDriver实现网络自动化,使用TestNG执行测试案例。
  • 该项目将由2个文件组成。BaseClassTestCheckboxes
  • BaseClass.java将包含浏览器初始化和连接到远程Selenium网格的代码。
  • TestCheckboxes.java将有2个测试案例,解释在Selenium WebDriver中定位、选择和对多个Checkbox进行验证的所有方法。

现在我们开始吧...

  1. 在Eclipse中创建一个Maven项目,并将其命名为MultipleCheckboxes。那些不喜欢Eclipse的人可以在他们选择的IDE中遵循同样的步骤。设置和结果仍将是一样的。
  2. 更新你的项目的pom.xml文件,以获得SeleniumTestNG的依赖性。我们将使用这两个的最新版本。

文件名:pom.xml

  1. 在你的src/test包内添加2个Java类文件,命名为BaseClass.javaTestCheckboxes.java

代码演练:BaseClass

BaseClass 文件内,为浏览器会话初始化添加以下代码,以运行测试案例,并在案例完成后关闭它。

文件名:BaseClass.java

这将被继承到我们的测试类中,从而避免了创建WebDriver会话和在网格上启动浏览器等代码的冗余。它还提供了一个驱动代码的抽象,使其不被其他类的用户所使用。

第一步。 在这个文件中,我们首先创建一个Selenium Remote WebDriver的实例,因为它将被用来在Selenium Cloud Grid上执行代码。

public RemoteWebDriver driver = null;

Selenium网格云上执行有助于在各种浏览器和操作系统上一起并行地执行多个案例。它还提供了速度和可扩展性,使执行更快、更可靠。

如果你是Selenium的新手,想知道什么是Selenium的云测试,那么我们建议你查看我们的指南:什么是Selenium?

订阅LambdaTest YouTube频道,随时了解围绕自动化浏览器测试Cypress E2E测试移动应用测试等的最新教程。

第2步。正如上一步提到的,由于我们使用的是云网格,我们需要添加用于执行代码的云平台的凭证。在这篇关于如何使用Java在Selenium WebDriver中选择多个复选框的博客中,我们使用了LambdaTest平台。

String username = "<lambdatest_username>";
String accessKey = "<lambdatest_accesskey>";

LambdaTest便于在云端3000多个真实浏览器和操作系统的在线浏览器场上 进行跨浏览器测试,同时还提供互动式仪表板,以便根据需要分析运行报告和日志。

要获取您的用户名和访问密钥,请在LambdaTest上创建您的个人资料后访问LambdaTest仪表板上的LambdaTest个人资料部分

第3步。在该文件中添加第一个函数setUp(),以设置浏览器的初始能力,并与LambdaTest远程网格建立连接。

这个函数在TestNG中被注解为**@BeforeMethod** 注解,因为我们希望在每次测试运行前执行这个函数。

@BeforeMethod
	public void setUp() {
	  //code to set the DesiredCapabilites as needed for the browser
        //Selenium Capabillities Generator of LambdaTest can be used for this

		try {
			driver = new RemoteWebDriver(
					new URL("https://" + username + ":" + accessKey
							+ "@hub.lambdatest.com/wd/hub"), capabilities);
		} catch (MalformedURLException e) {
			System.out.println("Invalid grid URL");
		}
	}

使用LambdaTest平台的另一个优势可以在这里看到,通过使用Selenium Desired Capabilities Generator,在LambdaTest平台上通过选择你所需要的浏览器和操作系统组合来进行SeleniumTestNG测试

Selenium Desired Capabilities Generator

第四步。一旦测试完成,我们还需要在每次运行后关闭浏览器,这就是为什么我们要添加另一个函数closeDriver()来关闭浏览器,并用@AfterMethod注解来确保在每个测试案例后执行。

@AfterMethod
public void closeDriver() {
	driver.quit();
}

代码演练。TestCheckboxes

在这个TestCheckboxes.java文件中,我们将添加2个测试用例。

  • 测试用例1:演示与单个Checkbox的交互。
  • 测试用例2:通过遍历多个复选框来演示与它们的交互。

这两个案例也将有Checkbox验证方法。

文件名:TestCheckboxes.java

**步骤 1.**正如你所看到的,这个文件中的两个测试用例都有共同的代码来启动浏览器并导航到被测试的网页,下面的代码就是用于此的。

System.out.println("Navigating to the URL");
driver.get("https://www.lambdatest.com/Selenium-playground/checkbox-demo");

**第2步a.**在第一个测试用例testSingleCheckbox中,我们使用其ID定位器来获取checkbox元素。

WebElement checkbox = driver.findElement(By.id("isAgeSelected"));

**步骤2-b.**之后,应用预验证来验证给定的复选框是否显示,在此基础上,使用click()方法选择它。

if(checkbox.isDisplayed())
{
	System.out.println("Checkbox is displayed. Clicking on it now");
	checkbox.click();
}

**第2-c步。**检查完复选框后,应用后验证来验证复选框是否被选中。

if(checkbox.isSelected())
{
	System.out.println("Checkbox is checked");
}

步骤3-a.现在进入第二个测试案例testMultipleCheckbox,在这个案例中,我们已经实现了穿越一组具有相同类名的复选框的逻辑,以识别并与它们进行交互,同时进行前和后验证。

**步骤3-b。**在这种情况下,第一步是获取使用相同类名的Checkbox网络元素的列表,然后将其存储到一个List类型的变量中。

List<WebElement> checkboxes = driver.findElements(By.className("cb-element mr-10"));

**第3-c步。**接下来,我们使用for循环遍历Checkboxes列表,并在验证Checkbox被显示并能进行交互后,逐一选择所有Checkbox。

for(int i=0; i<checkboxes.size(); i++)
{
	if(checkboxes.get(i).isDisplayed() && checkboxes.get(i).isEnabled())
	{
		checkboxes.get(i).click();
	}
}

**步骤3-d。**检查完所有的复选框后,接下来的代码是取消选择列表中索引1的复选框,然后做一个后置验证,以验证它在点击后是否被取消。

checkboxes.get(1).click();
if(checkboxes.get(1).isSelected())
{
	System.out.println("Checkbox is still selected");
}
else
{
	System.out.println("Checkbox is deselected successfully");
}

通过这些,我们已经了解了测试类的整个代码和实现。让我们继续看看本地和LambdaTest仪表板上的执行结果。

测试执行

到目前为止,在这篇关于如何使用Java在Selenium WebDriver中选择多个复选框的博客中,我们已经涵盖并理解了定位、交互和实现复选框自动化代码的各种方法。现在,我们继续前进,执行前面几节讨论的代码。

由于创建的项目是一个TestNG项目,我们在TestNG运行时执行案例,观察本地和LambdaTest仪表板上的输出,我们可以看到执行的细节。

测试用例1:testSingleCheckbox

testSingleCheckbox

在LambdaTest仪表板上,通过导航到测试,可以看到更详细的日志和一步步的命令执行。

LambdaTest dashboard

对于测试用例2:testMultipleCheckbox

testMultipleCheckbox

testMultipleCheckbox

testMultipleCheckbox

要使用高级工具来分析你的测试性能,请进入LambdaTest分析仪表板。你可以在 "测试摘要 "区域看到所有的测试结果、它们的状态以及测试通过或失败的总数量。此外,你还可以在测试概述部分看到最近执行的测试运行快照。

LambdaTest Analytics Dashboard

如果你是一名开发人员或测试人员,希望提高你的Selenium与Java能力,LambdaTest Selenium Java 101认证可以帮助你做到这一点。

https://www.lambdatest.com/certifications/selenium-java-101

下面是LambdaTest的Selenium Java 101认证的一个简短介绍。

结语

关于如何在Selenium WebDriver中使用Java选择多个复选框的博客已经结束了。在此,我们已经了解了基于网页上实现的不同的复选框定位策略,以及我们在进行自动化UI测试时如何与之互动。

这篇博客还解释了在Selenium WebDriver中使用复选框的前后验证,以及在执行Selenium自动化测试时在LambdaTest等云Selenium网格上执行同样的操作。

现在,你应该有足够的信心在你的项目中使用多个Checkboxes。因此,继续前进,开始检查一些复选框。

检查愉快!

常见问题解答(FAQ)

如何用键盘选择所有复选框?

要检查或取消一个复选框,请使用tab键将指针移至该复选框,然后点击键盘上的空格键。空格键就可以了。一旦焦点在复选框上,就按空格键来检查或取消复选框(通过点击Tab键)。

如何在Chrome中选择多个复选框?

只需点击并拖动即可同时选中或取消众多复选框。允许您通过点击和拖动来快速检查多个复选框,或者通过使用ALT+点击和拖动区域选择来快速检查。

什么是Selenium中的isEnabled?

这个方法检查一个元素是否被启用。如果该元素被启用,则返回一个真值。如果不是这样,它返回一个假值。下面的代码检查一个具有下一个id属性的元素是否被启用。