测试自动化有时在处理复杂的test cases时可能非常具有挑战性。尽管任何编程语言中都有多种方法可以解决特定问题,但您需要保持警惕,您的解决方案遵循最佳和最有效的编码实践。
设计automation testing framework时,一种基本而重要的方法是数据驱动的测试用例的参数化。数据驱动的测试用例可以用不同的数据值进行多次调用,这些数据值以参数为特定的参数以实现参数化。
。。谈论Java作为automation testing的编程语言,可以通过多种方式使用Selenium WebDriver,Appium等工具进行测试进行参数化。但是,有一种方法主要可以用于此目的: arrays.aslist()方法。
Java中的arrays.aslist()是一种重要方法实施参数化的许多方法。
在Java中的 arrays.aslist()上的博客中,我们将探索Java中的 arrays.aslist()在Java中的工作方式,并提供了示例以说明其用法。无论您是初学者还是经验丰富的Java开发人员,Java中的 arrays.aslist()都可以使您的编码更有效和富有成效。
所以,让我们潜入!
深入了解测试自动化,其UASAGE,类型以及如何从 automation testing
什么是Java中的arrays.aslist()?
java中的 arrays.aslist()是 java.util.arrays package package ,用于从数组创建列表。此方法返回由指定数组备份的固定大小列表,这意味着对列表所做的任何更改都将反映在原始数组中,反之亦然。
Java中的 arrays.aslist()可以多种方式使用,您可以将数组,元素和对象作为参数传递给该方法。让我们首先借助简单的代码示例理解其语法和用法。发布该文章,我们将讨论使用Selenium with Java的测试自动化相关的实时示例。
语法:
-
public 是访问修饰符。
-
静态是一种非访问修饰符。
-
list 是方法对象返回类型。
-
aslist 是方法名称。
-
a 是一种方法参数。
arrays.aslist()方法示例
您可以通过三种方式在Java中使用 arrays.aslist()通过传递不同的参数类型,然后将它们转换为 list 来实现参数化。
数组作为论点
Java中的 arrays.aslist()可以接受数组作为参数并将其转换为列表。作为参数传递给该方法的数组必须是包装器类类型(整数,float等),而不是原始数据类型(int,float等)。
import java.util.Arrays;
import java.util.List;
public class ArraysAsListWithArrayExample {
public static void main (String args[]) {
//Initializing a string Array
String arr[] = {"Java", "Python", "C", "Ruby"};
//Getting the list view of Array
List <String> list = Arrays.asList(arr);
//Printing the elements inside the list
System.out.println(list);
}
}
输出:
在此示例中,A string 类型数组已作为参数传递给Java中的 arrays.aslist(),用于将数组转换为字符串元素列表。
了解为什么Python是自动化测试的首选。该综合教程提供了 automation testing using Python 的分步指南,以帮助您简化测试过程。
元素作为论点
,您可以将多个逗号分隔元素作为参数传递给 arrays.aslist() method。
而不是传递数组。
import java.util.Arrays;
import java.util.List;
public class ArraysAsListWithElementsExample {
public static void main (String args[]) {
//Getting the list view of String elements
List <String> list = Arrays.asList("Java", "Python", "C", "Ruby");
//Printing the elements inside the list
System.out.println(list);
}
}
输出:
在上面显示的示例中,多个 string 类型元素直接作为参数传递给将它们转换为字符串元素列表的方法。
作为参数的对象
可能在某些情况下您必须在其中创建一个自定义类的对象列表,然后在该列表上执行一些操作。
Java中的 arrays.aslist()允许您将类对象作为参数传递。然后,它创建了可以使用特定操作的对象的列表。
public class ProgrammingLanguage{
//Declaring the instance variables
public String name;
public double version;
//Constructor to initialize the instance variables
public ProgrammingLanguage(String name, double version) {
this.name = name;
this.version = version;
}
// Overriding toString method to return the String representation of the object
public String toString() {
return "(" + this.name + "," + this.version + ")";
}
}
在上面显示的编程语言类中,我们正在借助构造函数初始化实例变量,并覆盖 toString()方法,以表示字符串形式的对象。
import java.util.Arrays;
import java.util.List;
public class ArraysAsListWithObjectsExample {
public static void main (String args[]) {
//Getting the list view of ProgrammingLanguage class objects
List <ProgrammingLanguage> list = Arrays.asList(
new ProgrammingLanguage("Java", 17.0),
new ProgrammingLanguage("Python", 3.10),
new ProgrammingLanguage("C", 17.0),
new ProgrammingLanguage("Ruby", 3.2)
);
//Printing the objects inside the list
System.out.println(list);
}
}
输出:
在上面的类中,我们将编程语言的对象传递给 aslist()方法作为参数,以获取这些对象的列表。
arrays.aslist()方法在测试自动化中使用
在Selenium Java tutorial的这一部分中,我们将讨论可以在Java中使用 arrays.aslist()的实时示例来参数化测试用例。
在本Appium教程中,了解Appium及其对移动自动化测试的好处。看看Appium的工作原理,并查看如何执行移动应用程序的Appium Automation testing 。 >
处理不同的驾驶员实例
UI testing框架的基本功能是在不同的浏览器或平台上执行测试用例。使用TestNG框架中的参数化概念可以很容易地实现。
随意选择您喜欢使用的任何框架来实现handling multiple browsers的逻辑。 testng是一种选择,但是如果您不熟悉它或更喜欢其他框架,则可以探索其他替代方案。
Java中的 arrays.aslist()可以主要用于此目的。假设Selenium webdriver为automation testing tool在此示例中,我们将看到如何使用 arrays.aslist() methot。
import java.util.Arrays;
import java.util.List;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class DriverManager {
private RemoteWebDriver driver;
public static void init_driver(String browser) throws MalformedURLException {
String username = System.getenv("LT_USERNAME") == null ? "Your LT Username" : System.getenv("LT_USERNAME");
String authkey = System.getenv("LT_ACCESS_KEY") == null ? "Your LT AccessKey" : System.getenv("LT_ACCESS_KEY");
// Create a list of browsers
List<String> browsers = Arrays.asList("chrome", "firefox", "edge");
// Loop through the list of browsers and create a driver instance for each one
for (String browserName : browsers) {
if (browser.equalsIgnoreCase("chrome")) {
//To launch the chrome browser on local
/*driver = new ChromeDriver();*/
//Setting chrome capabilities
DesiredCapabilities ChromeCaps = new DesiredCapabilities();
ChromeCaps.setCapability("platform", "Windows 10");
ChromeCaps.setCapability("browserName", "chrome");
ChromeCaps.setCapability("version", "latest");
ChromeCaps.setCapability("build", "TestNG With Java");
ChromeCaps.setCapability("name", m.getName() + this.getClass().getName());
ChromeCaps.setCapability("plugin", "git-testng");
//To launch the chrome browser on LambdaTest cloud grid
String[] Tags = new String[]{"Feature", "Magicleap", "Severe"};
ChromeCaps.setCapability("tags", Tags);
driver = new RemoteWebDriver(new URL("https://" + username + ":" + authkey + hub), ChromeCaps);
} else if (browser.equalsIgnoreCase("firefox")) {
//To launch the firefox browser on local
/*driver = new FirefoxDriver();*/
//Setting firefox capabilities
DesiredCapabilities FirefoxCaps = new DesiredCapabilities();
FirefoxCaps.setCapability("platform", "Windows 10");
FirefoxCaps.setCapability("browserName", "firefox");
FirefoxCaps.setCapability("version", "114.0");
FirefoxCaps.setCapability("build", "TestNG With Java");
FirefoxCaps.setCapability("name", m.getName() + this.getClass().getName());
FirefoxCaps.setCapability("plugin", "git-testng");
//To launch the firefox browser on LambdaTest cloud grid
String[] Tags = new String[]{"Feature", "Magicleap", "Severe"};
FirefoxCaps.setCapability("tags", Tags);
driver = new RemoteWebDriver(new URL("https://" + username + ":" + authkey + hub), FirefoxCaps);
} else if (browser.equalsIgnoreCase("edge")) {
//To launch the edge browser on local
/*driver = new EdgeDriver();*/
//Setting edge capabilities
DesiredCapabilities EdgeCaps = new DesiredCapabilities();
EdgeCaps.setCapability("platform", "Windows 10");
EdgeCaps.setCapability("browserName", "edge");
EdgeCaps.setCapability("version", "112.0");
EdgeCaps.setCapability("build", "TestNG With Java");
EdgeCaps.setCapability("name", m.getName() + this.getClass().getName());
EdgeCaps.setCapability("plugin", "git-testng");
//To launch the edge browser on LambdaTest cloud grid
String[] Tags = new String[]{"Feature", "Magicleap", "Severe"};
EdgeCaps.setCapability("tags", Tags);
driver = new RemoteWebDriver(new URL("https://" + username + ":" + authkey + hub), EdgeCaps);
} else {
throw new IllegalArgumentException("Invalid browser name: " + browser);
}
// Use the driver instance to navigate to a webpage and perform some actions
driver.get("https://www.lambdatest.com");
System.out.println(driver.getTitle());
// Close the driver instance
driver.quit();
}
}
}
您会看到,在Java中的 aslist()的帮助下,浏览器名称的列表已被初始化。然后,通过A for-each 循环迭代此列表,以实例化相应浏览器的驱动程序类。
您可以在Lambdatest上运行测试,Lambdatest是一个统一的数字体验测试平台,可让您在3000多个浏览器和真实设备上在online Selenium Grid上执行Java automation testing。您可以通过LambdaTest capabilities generator为测试生成自动化功能。在上面的测试代码中包含了使用功能生成器自动生成功能的代码段,以供参考。
订阅我们的LambdaTest YouTube Channel,以使用Selenium testing,Cypress testing等的最新教程进行实时更新。
验证多个URL重定向
我以前的一个项目中遇到的一个非常有趣的场景是验证包含URL列表及其预期重定向URL的安全清单。
此列表很大,包含许多URL。测试这种情况的最佳方法是将这些URL作为参数进行参数化测试方法,并在浏览器中一个一个接一个地打开它们以检查重定向的URL。
了解为什么Python是自动化测试的首选。该综合教程提供了 automation testing with python 的分步指南,可帮助您简化测试过程。
尽管我使用Excel表作为此测试方案的数据源,但在这里我将尝试使用 arrays.aslist()方法提供简化的代码示例,该方法将将URL作为URL作为参数并在控制台上打印重定向的URL。
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class ValidateURLRedirect {
public static void main(String args[]) throws IOException {
//Creating ChromeDriver instance
WebDriver driver = new ChromeDriver();
//Initializing a String array with URLs
String URLs[] = {"https://app.lambdatest.com/", "https://accounts.lambdatest.com/detail/profile"};
//Passing the String array to the asList method as an argument
List <String> URLlist = Arrays.asList(URLs);
//Iterating through the list and printing the redirected URLs
for (String URL: URLlist) {
driver.get(URL);
System.out.println(driver.getCurrentUrl());
}
}
}
输出:
要访问这些URL,register for a free account并登录到您的lambdatest帐户。
发布登录,您可以看到此代码仅使用 arrays.aslist()方法将URL的数组转换为列表,然后使用A for-迭代列表每个循环在浏览器中逐一打开所有URL。加载URL后,将当前页面URL提取并在控制台上打印。
处理多个网络元素
在某些方案中,您需要立即进行handle web elements来验证某些功能。这样一种情况的一个很好的例子是验证网页上没有链接或图像破裂。
要为此方案构建逻辑,您首先需要收集所有链接,然后一一键入它们以检查服务器是否返回404响应代码。 Java中的 arrays.aslist()再次在这里派上用场,很容易完成工作。
这是一个代码示例。
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class ValidateLinksAndImagesExample {
public static void main(String args[]) throws IOException {
//Creating ChromeDriver instance
WebDriver driver = new ChromeDriver();
//Opening the test URL
driver.get("https://the-internet.herokuapp.com/broken_images");
//Initializing a list of img elements
List<WebElement> allImages = driver.findElements(By.tagName("img"));
//Creating a list to store the broken image URLs
List<String> brokenImages = new ArrayList<String>();
//Iterating through the list of elements and hitting the img src URLs
for (WebElement link : allImages) {
String src = link.getAttribute("src");
System.out.println("Testing image source "+src);
HttpURLConnection connection = (HttpURLConnection) new URL(src).openConnection();
connection.setRequestMethod("HEAD");
int responseCode = connection.getResponseCode();
if (responseCode >= 400) {
//Adding all the broken image URLs to the list
brokenImages.add(src);
}
}
System.out.println("Broken images:");
//Printing the broken img URLs list
System.out.println(Arrays.asList(brokenImages));
}
}
输出:
您在此代码示例中可以看到,首先将所有 img 首先收集到列表中,然后将其SRC URL提取并一一单击以断言响应代码。所有返回404作为响应代码的URL都添加到另一个列表中,然后将此列表打印在控制台上。目前,此测试URL上有两个损坏的图像,并且两者的 src url均在控制台中打印。
奖励:arrays.Aslist vs. New ArrayList(arrays.aslist())
arrays.aslist()和 new ArrayList <>(arrays.aslist())是从Java中的数组创建列表的两种不同的方法。让我们详细讨论它们。
arrays.aslist()
arrays.aslist()在Java中创建了由原始数组支持的列表。这意味着对列表进行的任何更改都将反映在原始数组中,反之亦然。结果列表是固定尺寸的,无法调整大小。如果您需要一个可变列表,则需要根据原始列表创建一个新列表。
Java中的可变是指在创建后可以更改状态的对象。在这种情况下,可变列表是可以通过添加或删除元素来调整大小的列表。另一方面,不变的列表是一个列表,在其中无法进行结构性更改。
了解为什么Python是 automation testing in python 的首选。该综合教程提供了Python自动化测试的分步指南,以帮助您简化测试过程。
以下是代码示例,证明对列表所做的任何更改也将反映在原始数组中。
import java.util.Arrays;
import java.util.List;
public class ModifyElementsExample {
public static void main (String args[]) {
//Initializing a string Array
String [] arr = {"Java", "Python", "C", "Ruby"};
//Getting the list view of Array
List <String> list = Arrays.asList(arr);
//Modifying the value of thatist
list.set(3, "C++");
//Printing the original Array
System.out.println(Arrays.toString(arr));
}
}
输出:
在这里您可以看到列表的第三个索引的值已更改为 c ++ ruby 当原始数组被打印在控制台上时,它也反映了更改。
下面显示的第二个示例是证明使用 arrays.aslist()在Java中创建的列表是不可能的。
import java.util.Arrays;
import java.util.List;
public class ModifyListExample {
public static void main (String args[]) {
//Initializing a string Array
String [] arr = {"Java", "Python", "C", "Ruby"};
//Getting the list view of Array
List <String> list = Arrays.asList(arr);
//Modifying the structure of the list
list.add("C++");
//Printing the List
System.out.println(list);
}
}
输出:
在这里,您可以看到该程序已使用 add()方法进行列表的结构修改进行尝试时,将程序抛出了 unsupportedOperationException 。
new ArrayList(arrays.aslist())
另一方面, new arraylist <>(arrays.aslist()) 根据数组的元素创建一个新的 arraylist 。这意味着对新列表的任何更改都不会影响原始数组,反之亦然。最终的列表是可变的,可以调整大小。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ModifyNewListExample {
public static void main (String args[]) {
//Initializing a string Array
String [] arr = {"Java", "Python", "C", "Ruby"};
//Getting the list view of Array
List <String> list = new ArrayList<String>(Arrays.asList(arr));
//Modifying the list
list.add("C++");
//Printing the original Array
System.out.println(list);
}
}
在上面的示例中,列表已成功修改。
输出:
了解为什么Python是自动化测试的首选。该综合教程提供了 automation testing in python 的分步指南,以帮助您简化测试过程。
结论
Java中的 arrays.aslist()在 array 和 collection 接口之间的桥梁。它将数组转换为固定尺寸列表,对列表元素的值进行的任何更改都将反映在原始数组中,反之亦然。
这是一种在测试中实现参数化的方便方法,尤其是当您不使用框架中的其他支持库(例如Testng)时。
在整个博客中,我们探索了Java中 arrays.aslist()的语法和用法,并提供了示例以演示其功能。