使用Selenium自动化测试处理多个浏览器选项卡

使用Selenium进行自动化测试一直是将萌芽的自动化测试人员培养为专业人员的生命线。 硒是开源的,在全球范围内被广泛采用。 结果,您会得到社区的大力支持。 有多种用于不同语言的框架,这些框架提供与Selenium的绑定。 因此,您已经掌握了开始使用Selenium的一切。 现在,进入运行第一个测试脚本以使用Selenium执行自动化测试的阶段。 如果您正在学习Selenium自动化,那么这些脚本将涉及基本的测试场景。 您可以验证:

  • 一个带有Selenium自动化测试的简单登录表单 。
  • 使用Selenium WebDriver捕获网页的屏幕截图 。
  • 在Selenium WebDriver中使用CSS定位器的 Web元素。
  • 设置Selenium Grid以并行执行测试用例。
  • 生成硒测试报告 。

可能还有更多的事情,可能有人希望验证,因为它的目的是使用Selenium执行自动化测试。 今天,我将帮助您使用Selenium进行测试自动化的基本和基本验证之一。 我将演示如何使用Selenium自动化测试来处理多个浏览器选项卡。

实际方案入门

有时,您可能会遇到复杂的情况,其中可能必须打开新的选项卡或窗口并在打开的选项卡/窗口上执行所需的操作。 开始时处理多个选项卡或窗口可能看起来很复杂,但是一旦您知道如何处理它们,它就会变得非常容易。 让我们考虑一个场景。

假设您打开了Airbnb的主页,并希望在另一个选项卡中打开寄宿家庭的详细信息,在打开的选项卡上执行一些操作,然后切换回上一个选项卡。 那你怎么做呢?

您可以在网上找到与此相关的多种解决方案。 很少有人使用sendkeys方法“ Control + t”打开选项卡,然后在其中定位主页的正文。 由于sendKeys与浏览器行为有关,大多数情况下此方法无效。 因此,打开选项卡的最佳方法是使用Robot类或JavascriptExecutor。 机器人课程可确保使用“ Control + t”命令打开标签页,而通过javascript执行程序,您可以使用windows.open轻松打开标签页。 打开选项卡后,您可以使用Action Class方法或Selenium WebDriver接口方法getWindowHandle&getWindowHandles切换到选项卡。 我将在本文中展示这两种方法。

为了打开Airbnb中的标签,需要解决以下测试步骤。

  1. 打开Airbnb URL。
  2. 搜索“果阿”位置。
  3. 储存任何住宿的网址。
  4. 开启新分页
  5. 切换到新标签并启动所需的存储URL。

为了打开新标签,可以使用以下Robot类代码:

 Robot r = new Robot(); r.keyPress(KeyEvent.VK_CONTROL); r.keyPress(KeyEvent.VK_T); r.keyRelease(KeyEvent.VK_CONTROL); r.keyRelease(KeyEvent.VK_T); 

上面的代码有助于使用键盘的'control + t'命令打开选项卡。 可以使用sendKeys来执行此操作,但是由于使用它的浏览器的行为,它对于工作或不工作的信誉似乎是零星的。 您可以如下使用sendKeys命令来复制上述行为。

 driver.findElement(By.cssSelector(“body”)).sendKeys(Keys.CONTROL+ “t”); 

使用Window Handler方法处理Selenium中的选项卡

现在,我们要做的就是使用Window Handler方法切换到此打开的选项卡。 以下代码段供您参考:

 import java.awt.AWTException;  import java.awt.Robot;  import java.awt.event.KeyEvent;  import java.util.Set;  import java.util.concurrent.TimeUnit;   import org.openqa.selenium.By;  import org.openqa.selenium.Keys;  import org.openqa.selenium.WebDriver;  import org.openqa.selenium.chrome.ChromeDriver;  import org.openqa.selenium.firefox.FirefoxDriver;  import org.openqa.selenium.interactions.Actions;   public class HandlingMultipleTabs {  public static void main(String[] args) throws InterruptedException, AWTException { // TODO Auto-generated method stub         System.setProperty( "webdriver.chrome.driver" , ".\\ChromeDriver\\chromedriver.exe" ); WebDriver driver= new ChromeDriver(); driver.manage().timeouts().implicitlyWait( 30 , TimeUnit.SECONDS);         //Navigating to airbnb driver.get( " https://www.airbnb.co.in/ " );         driver.manage().window().maximize();         String currentHandle= driver.getWindowHandle();         //locating the location, looking for homestays driver.findElement(By.id( "Koan-magic-carpet-koan-search-bar__input" )).sendKeys( "Goa" , Keys.ENTER);         //Clicking on search button driver.findElement(By.xpath( "//button[@type='submit']" )).click(); String urlToClick=driver.findElement(By.xpath( "//div[text()='Luxury Three Bedroom Apartment with Pool & Jacuzzi']/ancestor::a" )).getAttribute( "href" );         //opening the new tab Robot r = new Robot(); r.keyPress(KeyEvent.VK_CONTROL); r.keyPress(KeyEvent.VK_T); r.keyRelease(KeyEvent.VK_CONTROL); r.keyRelease(KeyEvent.VK_T);         //getting all the handles currently available Set<String> handles=driver.getWindowHandles(); for (String actual: handles) {             if (!actual.equalsIgnoreCase(currentHandle)) { //switching to the opened tab driver.switchTo().window(actual);              //opening the URL saved. driver.get(urlToClick); } }                         }  } 

如果要切换回原始选项卡,请使用以下命令。

 driver.switchTo().defaultContent(); 

现在,让我们尝试使用JavascriptExecutor打开选项卡,并切换到上述相同场景的选项卡。 以下是参考的代码段:

 import java.util.Set;  import java.util.concurrent.TimeUnit;   import org.openqa.selenium.By;  import org.openqa.selenium.JavascriptExecutor;  import org.openqa.selenium.Keys;  import org.openqa.selenium.WebDriver;  import org.openqa.selenium.chrome.ChromeDriver;   public class multipltabsonce123 {  public static void main(String[] args) { // TODO Auto-generated method stub  System.setProperty( "webdriver.chrome.driver" , ".\\ChromeDriver\\chromedriver.exe" ); WebDriver driver= new ChromeDriver(); driver.manage().timeouts().implicitlyWait( 30 , TimeUnit.SECONDS);         //Navigating to airbnb driver.get( " https://www.airbnb.co.in/ " );         driver.manage().window().maximize();         String currentHandle= driver.getWindowHandle();         //locating the location, looking for homestays driver.findElement(By.id( "Koan-magic-carpet-koan-search-bar__input" )).sendKeys( "Goa" , Keys.ENTER);         //Clicking on search button driver.findElement(By.xpath( "//button[@type='submit']" )).click(); String urlToClick=driver.findElement(By.xpath( "//div[text()='Luxury Three Bedroom Apartment with Pool & Jacuzzi']/ancestor::a" )).getAttribute( "href" );         //opening the new tab ((JavascriptExecutor)driver).executeScript( "window.open()" );         //getting all the handles currently avaialbe Set<String> handles=driver.getWindowHandles(); for (String actual: handles) {             if (!actual.equalsIgnoreCase(currentHandle)) { //switching to the opened tab driver.switchTo().window(actual);              //opening the URL saved. driver.get(urlToClick); } }         }   } 

荣誉! 您已成功使用Selenium执行了自动化测试,以借助Windows Handler方法切换不同的浏览器选项卡。 现在,让我们以另一种方式进行研究。

使用Action类处理Selenium中的选项卡

如上所述,我们可以使用Window HandlerAction Class切换到选项卡。 下面的代码片段展示了如何使用Action类切换到标签页。 由于动作类也使用sendkey的推断,因此在使用中的浏览器中它可能会起作用,也可能不会起作用。

 import java.awt.AWTException;  import java.awt.Robot;  import java.awt.event.KeyEvent;  import java.util.Set;  import java.util.concurrent.TimeUnit;   import org.openqa.selenium.By;  import org.openqa.selenium.Keys;  import org.openqa.selenium.WebDriver;  import org.openqa.selenium.chrome.ChromeDriver;  import org.openqa.selenium.firefox.FirefoxDriver;  import org.openqa.selenium.interactions.Actions;   public class HandlingMultipleTabs {  public static void main(String[] args) throws InterruptedException, AWTException { // TODO Auto-generated method stub         System.setProperty( "webdriver.chrome.driver" , ".\\ChromeDriver\\chromedriver.exe" ); WebDriver driver= new ChromeDriver(); driver.manage().timeouts().implicitlyWait( 30 , TimeUnit.SECONDS);         //Navigating to airbnb driver.get( " https://www.airbnb.co.in/ " );         driver.manage().window().maximize();         String currentHandle= driver.getWindowHandle();         //locating the location, looking for homestays driver.findElement(By.id( "Koan-magic-carpet-koan-search-bar__input" )).sendKeys( "Goa" , Keys.ENTER);         //Clicking on search button driver.findElement(By.xpath( "//button[@type='submit']" )).click(); String urlToClick=driver.findElement(By.xpath( "//div[text()='Luxury Three Bedroom Apartment with Pool & Jacuzzi']/ancestor::a" )).getAttribute( "href" );         //opening the new tab Robot r = new Robot(); r.keyPress(KeyEvent.VK_CONTROL); r.keyPress(KeyEvent.VK_T); r.keyRelease(KeyEvent.VK_CONTROL); r.keyRelease(KeyEvent.VK_T);                         //switch using actions class Actions action= new Actions(driver); action.keyDown(Keys.CONTROL).sendKeys(Keys.TAB).build().perform();        //opening the URL saved. driver.get(urlToClick);                 }   } 

就是这样! 您已经使用Windows Handler方法和Action类通过Selenium自动化测试处理了多个浏览器选项卡。 现在,我将讨论使用硒的最常见缺点之一。 因此,我们知道Selenium WebDriver是用于自动化Web应用程序的出色开源工具。 但是,WebDriver的主要难点是测试脚本的顺序执行。

作为解决方案,ThoughtWorks(Selenium的创始人)提出了Selenium Grid,以帮助用户同时并行运行多个测试用例。 这大大降低了测试构建的执行。

因此,当我们使用Selenium执行自动化测试时,我们有一种并行运行多个测试用例的方法。 但是它的可扩展性如何?

建立自己的Selenium Grid将需要大量的CPU消耗,并且维护起来很麻烦。 您希望使用Selenium执行并行执行的测试数量,对计算的需求越高。 所以,你可以做什么? 如何使用Selenium进行大规模自动化测试?

使用Selenium on Cloud执行自动化测试

基于云的Selenium Grid可以让您运行测试用例,而无须设置基础架构。 您所需要的只是一个互联网连接。 我们拥有多种平台,可帮助我们提供丰富的浏览器,版本,移动设备,Android版本等。

让我们在LambdaTest Selenium Grid上执行上述测试案例。 我将展示如何在基于云的平台上打开多个选项卡,以及访问LambdaTest所需的详细信息,例如视频,屏幕截图,控制台日志等。

您需要做的就是在实例化remoteWebDriver的同时设置LambdaTest URL。 此URL是用户名,访问密钥和LambdaTest集线器URL的组合。 现在,您需要做的就是定义所需的平台,浏览器,版本和附加组件。 完成此设置过程后,请使用相同的多标签脚本并在LambdaTest平台上运行它。 以下是参考代码段:

 import java.awt.AWTException;  import java.awt.Robot;  import java.awt.event.KeyEvent;  import java.net.URL;  import java.util.Arrays;  import java.util.Set;  import java.util.concurrent.TimeUnit;   import org.openqa.selenium.By;  import org.openqa.selenium.JavascriptExecutor;  import org.openqa.selenium.Keys;  import org.openqa.selenium.WebDriver;  import org.openqa.selenium.chrome.ChromeDriver;  import org.openqa.selenium.firefox.FirefoxDriver;  import org.openqa.selenium.interactions.Actions;  import org.openqa.selenium.remote.DesiredCapabilities;  import org.openqa.selenium.remote.RemoteWebDriver;  import org.testng.annotations.AfterClass;  import org.testng.annotations.BeforeClass;  import org.testng.annotations.Test;   public class HandlingMultipleTabs {       public RemoteWebDriver driver= null ; public String url= " https://www.lambdatest.com/ " ; public static final String  username= "sadhvisingh24" ; // Your LambdaTest Username public static final String auth_key = "abcdefghi123456789" ; // Your LambdaTest Access Key public static final String URL= "@hub.lambdatest.com/wd/hub" ; //This is the hub URL for LambdaTest         @BeforeClass public void setUp() { DesiredCapabilities capabilities= new DesiredCapabilities(); "browserName" capabilities.setCapability( "browserName" , "chrome" ); capabilities.setCapability( "version" , "73.0" ); "win10" capabilities.setCapability( "platform" , "win10" ); // If this cap isn't specified, it will just get the any available one capabilities.setCapability( "build" , "MultipleTabs_Lambdatest" ); capabilities.setCapability( "name" , "MultipleTabs_Lambdatest" ); capabilities.setCapability( "network" , true ); // To enable network logs capabilities.setCapability( "visual" , true ); // To enable step by step screenshot capabilities.setCapability( "video" , true ); // To enable video recording capabilities.setCapability( "console" , true ); // To capture console logs try {              driver = new RemoteWebDriver( new URL( " https:// " + username + ":" + auth_key + URL), capabilities);                 }       catch (Exception e) {                 System.out.println( "Invalid grid URL" + e.getMessage()); }     System.out.println( "The setup process is completed" );     }         @Test public void handleMultipleTabs() throws InterruptedException, AWTException { // TODO Auto-generated method stub         driver.manage().timeouts().implicitlyWait( 30 , TimeUnit.SECONDS);         //Navigating to airbnb driver.get( " https://www.lambdatest.com " );         driver.manage().window().maximize();         String currentHandle= driver.getWindowHandle();         //locating the blog url String urlToClick=driver.findElement(By.xpath( "//a[text()='Blog']" )).getAttribute( "href" );                 //opening the new tab ((JavascriptExecutor)driver).executeScript( "window.open()" );         //getting all the handles currently availabe Set<String> handles=driver.getWindowHandles(); for (String actual: handles) {             if (!actual.equalsIgnoreCase(currentHandle)) { //switching to the opened tab driver.switchTo().window(actual);              //opening the URL saved. driver.get(urlToClick); } }                        }  @AfterClass public void closeDown() { driver.quit(); }  } 

上面的脚本将帮助您通过零停机时间的云Selenium Grid处理Selenium中的浏览器选项卡。 您可以在LambdaTest自动化仪表板上查看这些测试的状态。 在LambdaTest上使用Selenium执行自动化测试时,您可以查看视频,屏幕截图,控制台输出以及更多内容。 下面引用的屏幕截图:

测试的控制台输出:

结论

我们演示了使用Selenium进行的自动化测试,以使用Action Class和Windows Handler方法处理多个选项卡。 我们开始意识到在本地运行Selenium WebDriver和Grid的痛苦点。 转向基于 LambdaTest之类的基于云的Selenium Grid可以帮助您轻松扩展,因此您可以大大减少构建时间并更快地交付产品。

强大的CI / CD管道

如果您对此主题有任何疑问,请告诉我。 我将针对Selenium自动化测试的基本主题撰写更多文章,以帮助您更好地成长为专业的自动化测试人员。 请继续关注更多快乐的测试!

部分链接文字

翻译自: https://www.javacodegeeks.com/2019/07/handling-multiple-browser-selenium-automation-testing.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三层交换机工作原理介绍

每个网络主机、工作站或者服务器都有自己的IP地址和子网掩码。当主机与服务器进行通信的时候&#xff0c;根据自身的IP地址和子网掩码、以及服务器的IP地址&#xff0c;来确定服务器是否和自己处于相同的网段&#xff1a; 1、如果判定在相同网段内&#xff0c;则直接通过地址解…

三层交换机有什么优势?

三层交换机的技术日益成熟&#xff0c;应用日益广泛&#xff0c;在一定范围内&#xff0c;它比路由器更具优势&#xff0c;但是三层交换机与路由器还是有很大的区别&#xff0c;在局域网中&#xff0c;三层交换机有着明显的优势。 1、子网间的传输带宽可以任意分配。 在传统路…

私有环网协议MR-ring介绍

以太网从诞生到今天已经走过了二十几个念头&#xff0c;伴随着IP的大发展&#xff0c;以太网已经一统江湖&#xff0c;98%的局域网采用以太网标准构建。在这二十多年中&#xff0c;以太网不断推陈出新&#xff0c;在速率、安全、稳定性等各方面均有一系列的标准&#xff0c;而环…

网管型工业交换机如何创建网络冗余

与非网管型工业交换机相比&#xff0c;使用杭州飞畅网管型工业交换机的其中一个好处是其冗余功能。这允许您使用带有额外连接的以太网&#xff0c;因此如果网络上两点之间的一条路径出现故障&#xff0c;则可以使用另一条路径来传递消息。如果一个链路或工业交换机发生故障&…

使用var,Lombok和Fluxtion轻松处理事件

介绍 在本文中&#xff0c;我将结合使用Lombok和Fluxtion这两种产品&#xff0c;以演示工具如何在减少代码编写和交付时间的同时提高代码的可读性。 使用Java 10中的var可以进一步改善这种情况。 产品和var都在构建时使用推断来加速开发。 Fluxtion的精神是最大程度地减少浪费…

网管型工业交换机如何提高网路流量过滤?

虽然一个非网管型工业交换机会从一个设备端过滤出许多数据包&#xff0c;但还是有很多数据包非网管型工业交换机无法处理&#xff0c;而这些数据包又必须从端口传输到所有设备上。当一个设备接收到不是特定给该设备的数据包时&#xff0c;它必须先耗费资源来处理这些信息数据最…

html5中meter讲解_Java中的得墨meter耳定律–最少知识原理–实际示例

html5中meter讲解得墨meter耳定律&#xff08;也称为最少知识定律&#xff09;是一种编码原理&#xff0c;它表示模块不应该知道其操作的对象的内部细节。 如果代码取决于特定对象的内部细节&#xff0c;则很有可能一旦该对象的内部发生更改&#xff0c;它就会中断。 由于封装是…

网络交换机的分类介绍

从广义上来看&#xff0c;交换机分为两种&#xff1a;广域网交换机和局域网交换机。广域网交换机主要应用于电信领域&#xff0c;提供通信基础平台。而局域网交换机则应用于局域网络&#xff0c;用于连接终端设备&#xff0c;如PC机及网络打印机等。 按照现在复杂的网络构成方…

网络交换机的作用有哪些?

现如今&#xff0c;随着通信业的发展以及国民经济信息化的推进&#xff0c;网络交换机市场呈稳步上升态势&#xff0c;以太网技术已成为当今最重要的一种局域网组网技术&#xff0c;网络交换机也就成为了最普及的交换机。那么&#xff0c;网络交换机的作用有哪些呢&#xff1f;…

网络交换机功能介绍

交换机的主要功能包括物理编址、网络拓扑结构、错误校验、帧序列以及流控。目前交换机还具备了一些新的功能&#xff0c;如对VLAN&#xff08;虚拟局域网&#xff09;的支持、对链路汇聚的支持&#xff0c;甚至有的还具有防火墙的功能。 交换机除了能够连接同种类型的网络之外…

HOW-TO:具有MySQL的JEE应用程序中具有集群功能的Quartz Scheduler

Quartz Scheduler是Java世界中最流行的调度库之一。 过去&#xff0c;我主要在Spring应用程序中使用Quartz。 最近&#xff0c;我一直在研究要在云中部署的JBoss 7.1.1上运行的JEE 6应用程序中的调度。 我考虑的一种选择是Quartz Scheduler&#xff0c;因为它提供了与数据库的集…

办公网络对工业交换机的功能要求

如今&#xff0c;随着社会的发展&#xff0c;很多公司对网络的要求越来越高&#xff0c;系统越来越复杂&#xff0c;很多老线路需要改造升级&#xff0c;对工业交换机的要求也越来越高。但是&#xff0c;很多企业并不懂如何改造升级。今天飞畅科技的小编就来为大家详细讲解下公…

工业交换机和工控交换机有什么区别?

众所周知&#xff0c;以太网交换机一般分为&#xff1a;商用(以太网)交换机、工业(以太网)交换机、家用(以太网)交换机&#xff0c;因为我们是专业的工业交换机厂家&#xff0c;在这里着重介绍下工业交换机。 工业交换机一般用在工业生产场合&#xff0c;通常外观和安装形式多…

工业型交换机相比普通交换机有哪些要求?

随着自动化技术逐渐成熟&#xff0c;并伴随工业以太网的应用和大中型工业控制的网络的创建&#xff0c;工业交换机的应用越来越广泛。工业型交换机与一般交换机对比有必须的差异&#xff0c;工业型交换机在整体规划上及其在电子器件的采用上&#xff0c;其抗压强度和可接受性层…

使用eclipse调试ns3配置说明

Tips&#xff1a;安装eclipse时注意选择C开发组件&#xff1b; &#xff08;环境配置参考&#xff1a;https://www.cnblogs.com/zlcxbb/p/3852810.html&#xff09; &#xff08;官方配置介绍&#xff1a;https://www.nsnam.org/wiki/HOWTO_configure_Eclipse_with_ns-3&…

工业以太网交换机特点分析及使用注意事项

在网络发达的今天&#xff0c;交换机被许多需要使用网络的朋友使用&#xff0c;可以实现一个网络多台电脑公用。但是什么是工业以太网交换机&#xff0c;很惯性的思维就是工业用的交换机&#xff0c;但是具体工业以太网交换机性能特点有什么呢&#xff1f;接下来就由杭州飞畅科…

java整数的因式分解_如何在Java中找到整数的质数-因式分解

java整数的因式分解编程课程中的常见家庭作业/任务之一是关于Prime Factorization。 要求您编写一个程序以找到给定整数的素因子 。 一个数字的素数因子是将精确地除以给定数字的所有素数。 例如&#xff0c;素数因子35是7和5&#xff0c;它们本身都是素数&#xff0c;并且精确…

串口服务器的通讯模式

串口服务器&#xff0c;一个为RS-232/485/422到PC/IP之间完成数据转换的具有强大功能的方便快捷的通讯接口转换器。串口服务器通过作为服务器端&#xff0c;提供RS-232/485/422终端串口与TCP/IP网络的数据双向透明传输&#xff0c;提供串口转网络功能&#xff0c;RS-232/485/42…

ns3gym与ns3ai的安装方法

编译运行的常用命令 1&#xff0c;针对ns3主项目的编译命令 分两步&#xff1a;第一&#xff0c;./waf configure&#xff1b;第二&#xff0c;./waf&#xff08;或者./waf build&#xff09; 详见《开源网络模拟器ns3》P13 2&#xff0c;针对多脚本同时运行的编译命令 ns3…

apache hadoop_通过Apache Hadoop大规模扩展Apache Solr实时实时索引

apache hadoop播客的第22集是与Patrick Hunt的谈话 我们讨论了Apache Solr&#xff08;上游&#xff09;中的新工作&#xff0c;使它可以在Apache Hadoop上工作。 Solr支持将其索引和事务日志文件写入和读取到HDFS分布式文件系统。 这不使用Hadoop Map-Reduce处理Solr数据&…