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

selenium自动化测试

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

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

可能还有更多的事情,一个目标可能是进行验证,因为它旨在使用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的最常见缺点之一。 因此,我们知道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

selenium自动化测试

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

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

相关文章

qt和c#怎么选_请问目前做windows桌面应用程序,MFC、QT、C#哪个更好?

回答问题之前&#xff0c;先装个逼——没有主导过生命周期三年以上的桌面软件项目的&#xff0c;闭嘴。你连一个桌面软件项目的生命周期都没经历过&#xff0c;你凭什么做技术选型&#xff1f;凭信仰吗&#xff1f;装逼结束&#xff0c;正文开始。首先&#xff0c;非主流技术和…

java 白皮书的关键术语

【0】README 0.1&#xff09; 本文转自 core java volume 1&#xff0c;仅供了解&#xff0c;所谓爱屋及乌嘛&#xff1b; 0.2&#xff09; java的设计者编写了颇有影响力的白皮书&#xff0c;用来解释设计的初衷以及完成的情况&#xff0c;并发布了一个摘要&#xff1b;【1】…

当集合a为空集时a的取值范围_高中数学必修一第一章集合分节练习和章末测试题含答案[1] 2...

高中数学必修1 第一章 集合 分节练习和章末综合测试题含答案1 集合的含义与表示1、下列各组对象能否组成一个集合&#xff1f;(1)接近于0的数的全体&#xff1b; (2)2的近似值的全体&#xff1b; (3)平面上到点O 的距离等于1的点的全体&#xff1b; (4)正三角形的全体&#xff…

spring jpa 流式_从响应式Spring Data存储库流式传输实时更新

spring jpa 流式这篇文章详细介绍了从数据库到对该数据感兴趣的任何其他组件进行流更新的幼稚实现。 更准确地说&#xff0c;如何更改Spring Data R2DBC存储库以向相关订阅者发出事件。 对R2DBC和Spring的一点背景知识将对这篇文章有所帮助。 我以前的著作《 使用 Microsoft S…

弹窗页面交互_UI进阶知识-信息提交类弹窗该如何设计?

原文作者&#xff1a;风筝KK 信息提交类弹窗大家应该都比较熟悉&#xff0c;和其他弹窗的区别在于他有输入、选择等操作&#xff0c;比如我们常见的输入验证码、留言回复、充值转账、任务设置等。看上去设计都比较简单&#xff0c;但是当你验收时就会发现问题&#xff0c;为什么…

selenium并行_如何在不同的浏览器中设置Selenium网格以并行执行

selenium并行到目前为止&#xff0c;Selenium是最常用的Web自动化测试工具。 如此受欢迎的原因之一是Selenium的自动跨浏览器测试功能。 Selenium自动化测试可以帮助您在所有主要浏览器&#xff0c;所有主要操作系统甚至移动设备浏览器上进行测试。 您可以在所有功能测试中获得…

java 发展简史

【0】README 0.1&#xff09; 本文转自 core java volume 1&#xff0c;仅供了解Java 的发展历史&#xff0c;它的前世今生&#xff0c;所谓知己知彼&#xff0c;百战不殆&#xff08;just a joke&#xff09; &#xff1b; 【1】java 发展简史 1.1&#xff09;java的历史要…

axios代理跨域 cli4_跨域本质及解决办法

1、什么是跨域&#xff1f;2、如何解决&#xff1f;跨域是前端所独有的&#xff0c;后端不存在跨域问题。是浏览器的一种安全保护手段&#xff0c;为了防止别人抓取、篡改你的网站数据信息。遵循同源策略、同协议&#xff08;http&#xff09;、同域名、同端口&#xff0c;少一…

如何使用eclemma插件_如何集成和使用EclEmma插件来获得良好的Junit覆盖率

如何使用eclemma插件你好朋友&#xff0c; 如果编写好的代码很重要&#xff0c;那么编写覆盖所有业务逻辑的优良Junit测试用例也同样重要。通过编写覆盖业务逻辑的Junit测试用例&#xff0c;我们实际上确保代码的每种方法都能正常工作按照预期进行&#xff0c;因此减少了在软…

Java 相关术语

【0】README 0.1&#xff09; 本文转自 core java volume 1&#xff0c;仅供了解Java 的相关术语&#xff0c;包括像JDK、JRE等 &#xff1b;而且我感觉&#xff0c;了解了这些过后&#xff0c;你会更懂 Java&#xff0c; 更热爱它&#xff1b; 【2】Java术语 2.1&#xff09;…

一般试卷的纸张大小是多少_pdf试卷怎么打印在A3纸上

一般的PDF试卷的纸张大小都是A4大小&#xff0c;没有现成A3大小Word文档的试卷时&#xff0c;需要将PDF试卷转换Word文档之后进行排版&#xff0c;如何实现这一操作呢&#xff1f;请接着往下学习吧~一、将试卷的PDF格式转换为Word1.进入PDF快转官网&#xff0c;点击下载按钮下载…

设置 JDK环境变量(Windows)

【0】README 0.1&#xff09; 本文转自 core java volume 1&#xff0c;旨在说明如何设置 JDK环境变量&#xff0c;以及为什么要设置的问题&#xff1b;【1】JDK目录树 Attention&#xff09;就Java 而言&#xff0c; docs 和 src 是两个最有用的子目录&#xff1a;因为 docs …

光流法测试代码_高效的企业测试-工作流和代码质量(4/6)

光流法测试代码本文的这一部分将讨论在开发过程中拥有有效工作流程的影响&#xff0c;以及适当的测试代码质量如何使我们能够创建可维护的测试&#xff0c;尤其是对于复杂项目。 开发工作流程和管道 编程是一项流程活动&#xff0c;我们开发人员应该对保持工作流程高效和缩短…

水泵怎么做_泳池设备日常怎么维护和保养?

点击上方“蓝字”&#xff0c;关注我们.●电机突然停止运转怎么办&#xff1f;1.检查电路和电线接口等。2.检查输送到电机的电压是否过低(通常由于电源线太小而引致的电流不足)。3.检查是否有过载而引起电流过大。注&#xff1a;Hayward 水泵的单相电机有自动过热保护装置。该装…

鸡肉部位英文对照_鸡肉和鸡蛋–测试前解决Spring属性

鸡肉部位英文对照考虑一个负责进行远程调用和获取详细信息的服务类&#xff1a; ... public class CitiesService { private final WebClient.Builder webClientBuilder; private final String baseUrl; public CitiesService( WebClient.Builder webClientBuilder, Value ( &…

git pull忽略指定文件_Git忽略提交规则

在使用Git的过程中&#xff0c;我们喜欢有的文件比如日志&#xff0c;临时文件&#xff0c;编译的中间文件等不要提交到代码仓库&#xff0c;这时就要设置相应的忽略规则&#xff0c;来忽略这些文件的提交。简单来说一个场景&#xff1a;在你使用git add .的时候&#xff0c;遇…

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

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

更换mysql_安利给你,关于MySQL字符集乱码与解决方案

推荐阅读&#xff1a;闭关修炼21天&#xff0c;“啃完”283页pdf&#xff0c;我终于4面拿下字节跳动offer肺炎在家“闭关”&#xff0c;阿里竟发来视频面试&#xff0c;4面顺利拿下offer字符集是一套符号和编码的规则&#xff0c;不论是在oracle数据库还是在mysql数据库&#x…

api自动化_如何在不增加人员的情况下自动化API安全程序

api自动化在这篇文章中&#xff0c;我们将撰写一篇综合文章&#xff0c;内容涉及如何在不增加人员的情况下自动执行API安全程序。 在现代世界中&#xff0c;数据对于提供者和消费者都至关重要。 数据科学的出现证明了这一事实。 对于某些组织&#xff0c;整个业务模型是建立在信…

kali用x-shell连接_良心国产工具,比Xshell好用还免费!

使用或维护Linux系统的都知道&#xff0c;我们日常对服务器的操作&#xff0c;一般都会借助SSH工具远程登录到服务器之后进行操作。常用的SSH工具有不少&#xff0c;比如&#xff1a;Xshell、Putty、SSH Secure Shell Client、secureCRT等等。民工哥使用过其中两种secureCRT和X…