如何在Java中使用arrays.aslist()[带有示例]
#java #automationtesting #softwaretesting

测试自动化有时在处理复杂的test cases时可能非常具有挑战性。尽管任何编程语言中都有多种方法可以解决特定问题,但您需要保持警惕,您的解决方案遵循最佳和最有效的编码实践。

设计automation testing framework时,一种基本而重要的方法是数据驱动的测试用例的参数化。数据驱动的测试用例可以用不同的数据值进行多次调用,这些数据值以参数为特定的参数以实现参数化。

谈论Java作为automation testing的编程语言,可以通过多种方式使用Selenium WebDriverAppium等工具进行测试进行参数化。但是,有一种方法主要可以用于此目的: 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的测试自动化相关的实时示例。

语法:

image

  • 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);

   }

}

输出:

image

在此示例中,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);

   }

}

输出:

image

在上面显示的示例中,多个 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);

   }

}

输出:

image

在上面的类中,我们将编程语言的对象传递给 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();
          }
      }
}

image

您会看到,在Java中的 aslist()的帮助下,浏览器名称的列表已被初始化。然后,通过A for-each 循环迭代此列表,以实例化相应浏览器的驱动程序类。

您可以在Lambdatest上运行测试,Lambdatest是一个统一的数字体验测试平台,可让您在3000多个浏览器和真实设备上在online Selenium Grid上执行Java automation testing。您可以通过LambdaTest capabilities generator为测试生成自动化功能。在上面的测试代码中包含了使用功能生成器自动生成功能的代码段,以供参考。

订阅我们的LambdaTest YouTube Channel,以使用Selenium testingCypress 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());
  }
 }
}

输出:

image

要访问这些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));

   }

}

输出:

image

您在此代码示例中可以看到,首先将所有 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));

   }

}

输出:

image

在这里您可以看到列表的第三个索引的值已更改为 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);

   }

}

输出:

image

在这里,您可以看到该程序已使用 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);

   }
}

在上面的示例中,列表已成功修改。

输出:

image

了解为什么Python是自动化测试的首选。该综合教程提供了 automation testing in python 的分步指南,以帮助您简化测试过程。

结论

Java中的 arrays.aslist() array collection 接口之间的桥梁。它将数组转换为固定尺寸列表,对列表元素的值进行的任何更改都将反映在原始数组中,反之亦然。

这是一种在测试中实现参数化的方便方法,尤其是当您不使用框架中的其他支持库(例如Testng)时。

在整个博客中,我们探索了Java中 arrays.aslist()的语法和用法,并提供了示例以演示其功能。