使用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中的标签,需要解决以下测试步骤。
- 打开Airbnb URL。
- 搜索“果阿”位置。
- 储存任何住宿的网址。
- 开启新分页
- 切换到新标签并启动所需的存储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 Handler和Action 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可以帮助您轻松扩展,因此您可以大大减少构建时间并更快地交付产品。
如果您对此主题有任何疑问,请告诉我。 我将针对Selenium自动化测试的基本主题撰写更多文章,以帮助您更好地成长为专业的自动化测试人员。 请继续关注更多快乐的测试!
翻译自: https://www.javacodegeeks.com/2019/07/handling-multiple-browser-selenium-automation-testing.html
使用Selenium自动化测试处理多个浏览器选项卡相关推荐
- selenium自动化测试_使用Selenium自动化测试处理多个浏览器选项卡
selenium自动化测试 使用Selenium进行自动化测试一直是将萌芽的自动化测试人员培养为专业人员的生命线. Selenium是开源的,在全球范围内被广泛采用. 结果,您会得到社区的大力支持. ...
- 《手把手教你》系列基础篇之2-python+ selenium自动化测试-打开和关闭浏览器(详细)
简介 本节介绍如何初始化一个webdriver实例对象driver,然后打开和关闭firefox浏览器.要用selenium打开fiefox浏览器.首先需要去下载一个driver插件geckodriv ...
- python360安全浏览器_使用python3.7 的pycharm selenium自动化测试中启动360浏览器、360极速浏览器的方法...
写于:2019.01.02(实测日) 一.下载360浏览器或360极速浏览器的Chrome驱动 这里最好下载去官网下载最新版的浏览器,版本越新,越利于安装.在做自动化测试中不可能只用360浏览器,也会 ...
- selenium自动化测试_维持Selenium测试自动化的完美方法
selenium自动化测试 毫无疑问, 自动浏览器测试已改变了软件开发的工作方式. 如果不是Selenium,我们将无法像我们一样使用各种各样的无错误的Web应用程序. 但是有时,甚至IT部门也误解了 ...
- web课程第一次实验报告——利用自动化测试工具操纵无头浏览器,进行网页爬虫、截图等实验
实验背景: 无头浏览器 无头浏览器是没有图形用户界面(GUI)的web浏览器,通常是通过编程或命令行界面来控制的.它会把网站加载到内存并执行页面上的 JavaScript,因为不会展示图形界面,所以运 ...
- selenium自动化测试-2.浏览器基本操作
------·今天距2020年92天·------ 这是ITester软件测试小栈第44次推文 大家好 我是vivi小胖虎 在此之前我们已经搭建好selenium环境 今天给大家介绍浏览器的基本操作 ...
- selenium自动化测试环境搭建及启动safair浏览器(Mac)
selenium自动化测试环境搭建及启动safair浏览器 ###前提环境 mac系统 safair浏览器 python(只不过mac自带python2.7可以不用下载) pycharm 打开终端 p ...
- selenium自动化测试浏览器驱动安装(属于转载文章)
1.下载selenium压缩包 http://pypi.python.org/pypi/selenium 下载后压缩在python文件下的lib>site-package文件夹下 2.进入sel ...
- 《手把手教你》系列基础篇之(三)-java+ selenium自动化测试- 启动三大浏览器(上)(详细教程)
1.简介 前边宏哥已经将环境搭建好了,今天就在Java项目搭建环境中简单地实践一下: 启动三大浏览器.按市场份额来说,全球前三大浏览器是:IE.Firefox.Chrome.因此宏哥这里主要介绍一下如 ...
最新文章
- View的生命周期方法和Activity生命周期方法关系
- 【数字信号处理】序列傅里叶变换 ( 基本序列的傅里叶变换 | e^jωn 的傅里叶变换 )
- 【图像处理opencv】_图像边缘
- [Jarvis OJ - PWN]——Typo(内涵peak小知识)
- spring之BeanFactory
- 联合体(union)和结构体(struct)的区别
- wpf office 菜单_如何带回Office 2007中的旧菜单
- 5部适合学英语的动画电影,快和孩子一起看!
- 黑群晖找不到设备_黑群晖洗白算号器SN、MAC地址
- nacos加载多配置集
- Python之获取中国各地区矢量地图数据(shp格式)
- 洛谷p5369[PKUSC2018]最大前缀和
- 163免费邮件群发平台,企业群发邮件的哪个好?企业邮件群发助手
- 计算机图形学期末复习知识点总结
- python:实现丢番图方程算法(附完整源码)
- uni-app【判断手机是否安装微信QQ】
- rk3399 typec鼠标及滑鼠问题
- 论文阅读笔记《Dynamic Few-Shot Visual Learning without Forgetting》
- plsql取消文件备份
- Dism 错误: 1450