精华内容
下载资源
问答
  • 经过前面两篇文章的铺 垫,我们这篇介绍,webdriver如何处理,一个浏览器上多个...这种情况,在测试中经常遇到,自动化中,webdriver是 如何处理的呢。 我们先来看一个实例,在京东首页,点击手机,会在新的页面显...

    经过前面两篇文章的铺 垫,我们这篇介绍,webdriver如何处理,一个浏览器上多个窗口之间切换的问题。我们先脑补这样一个测试场景,你在页面A点击一个连接,会在新的 tab窗口打开页面B,这个时候,你在页面B点击一个连接,会在新的tab窗口打开页面C。这种情况,在测试中经常遇到,自动化中,webdriver是 如何处理的呢。

           我们先来看一个实例,在京东首页,点击手机,会在新的页面显示手机通讯的页面,在手机页面点击小米,会在新的窗口打开显示小米手机的页面。这个过程,刚好 是页面A到页面B再到页面C。我们先抛开其他的,就是先实现driver在页面A切换到页面B,然后切换到页面C这个过程如何实现,在webdriver 中提供了一个switch.to.window(handle)的方法。参数handle就是前面文章中提到的获取窗口句柄的值。

    相关代码如下:

    1. package lessons;  
    2.   
    3. import java.util.ArrayList;  
    4. import java.util.Iterator;  
    5. import java.util.List;  
    6. import java.util.Set;  
    7. import java.util.concurrent.TimeUnit;  
    8.   
    9. import org.openqa.selenium.By;  
    10. import org.openqa.selenium.WebDriver;  
    11. import org.openqa.selenium.WebElement;  
    12. import org.openqa.selenium.chrome.ChromeDriver;  
    13.   
    14. public class ElementOpration {  
    15.     public static void main(String[] args) throws Exception {    
    16.           
    17.         System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");    
    18.              
    19.         WebDriver driver = new ChromeDriver();    
    20.        
    21.         driver.manage().window().maximize();    
    22.          
    23.         driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);  
    24.             
    25.         driver.get("https://www.jd.com/");    
    26.          
    27.         Thread.sleep(1000);  
    28.           
    29.         //点击京东左侧菜单中的 手机  
    30.         WebElement phone_link = driver.findElement(By.linkText("手机"));  
    31.         phone_link.click();  
    32.         Thread.sleep(1000);  
    33.       
    34.         // 获取当前页面句柄    
    35.         String handle = driver.getWindowHandle();    
    36.         // 获取所有页面的句柄,并循环判断不是当前的句柄   
    37.         for (String handles : driver.getWindowHandles()) {    
    38.             if (handles.equals(handle))    
    39.                 continue;    
    40.             driver.switchTo().window(handles);    
    41.         }    
    42.           
    43.         WebElement xiaomi_link = driver.findElement(By.linkText("小米"));  
    44.         xiaomi_link.click();  
    45.         Thread.sleep(1000);  
    46.          
    47.     }    
    48. }  

           上面在获取handles过程写了一个for循环,for循环的句柄和当前driver的句柄相等,那么就continue,也就是结束单循环,什么也不 做。如果不是,那么就调用切换窗口的方法,切换到第二个窗口。到了这里,可能有人就会提出,如果我需要第二个切换到第三个呢,假如说,在判断第三个句柄不 等于第二个,那么driver会不会默认切换到第三个窗口还是切换到第一个呢。如果真要这么做,需要用到ArrayList,然后用到迭代,可能稍微变得 复杂。为了避免这种复杂情况出现,我推荐这样做,只需要把上面代码中的continue语句改成driver.close(),前面文章介绍 过,close是关闭当前页面。如果是页面A点击链接打开页面B,那么这个过程关闭的就是页面A,同时把driver切换到页面B。如果有第三个,从第二 个页面到第三个页面也是用这样切换方法。这里永远就两个页面之间处理的关系。一般来说,自动化也是尽量在一个页面做完相关测试,才会切换到其他页面。

    修改后脚本代码如下:

    1. package lessons;  
    2.   
    3. import java.util.ArrayList;  
    4. import java.util.Iterator;  
    5. import java.util.List;  
    6. import java.util.Set;  
    7. import java.util.concurrent.TimeUnit;  
    8.   
    9. import org.openqa.selenium.By;  
    10. import org.openqa.selenium.WebDriver;  
    11. import org.openqa.selenium.WebElement;  
    12. import org.openqa.selenium.chrome.ChromeDriver;  
    13.   
    14. public class ElementOpration {  
    15.     public static void main(String[] args) throws Exception {    
    16.           
    17.         System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");    
    18.              
    19.         WebDriver driver = new ChromeDriver();    
    20.        
    21.         driver.manage().window().maximize();    
    22.          
    23.         driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);  
    24.             
    25.         driver.get("https://www.jd.com/");    
    26.          
    27.         Thread.sleep(1000);  
    28.           
    29.         //点击京东左侧菜单中的 手机  
    30.         WebElement phone_link = driver.findElement(By.linkText("手机"));  
    31.         phone_link.click();  
    32.         Thread.sleep(1000);  
    33.       
    34.         // 获取当前页面句柄    
    35.         String handle = driver.getWindowHandle();    
    36.         // 获取所有页面的句柄,并循环判断不是当前的句柄   
    37.         for (String temhandle : driver.getWindowHandles()) {    
    38.             if (!temhandle.equals(handle))    
    39.                 driver.close();  
    40.                 driver.switchTo().window(temhandle);   
    41.              
    42.         }    
    43.           
    44.         WebElement xiaomi_link = driver.findElement(By.linkText("小米"));  
    45.         xiaomi_link.click();  
    46.         Thread.sleep(1000);  
    47.           
    48.     }    
    49. }  

           上面实现了页面A,切换到页面B,同时关闭页面A,页面B点击触发页面C,这个过程还需要用for循环判断一次。所以关于这块,我建议你单独写成一个方 法,例如静态方法,直接调用这个,就代码看起来很舒服。关于这个,后面我们会介绍,框架设计部分,肯定要写不同的方法进行调用。

    转载于:https://www.cnblogs.com/huangjiani/p/8109613.html

    展开全文
  • 手机 pdf 阅读器

    2009-02-12 23:00:29
    PS:已知与UMD有关的BUG:由于定位功能有些BUG,跳转有时并不能正确刷新,此时只需要关闭后重新打开该文件即可定位(与之相关的也包括书签) (所有与偏好有关的问题暂时都不解决,因为还有设置会改动。。。) [2007.9....
  • 四、下载自动提示补全词典,我还下载了cocos2dx-3.10-api.lua,把下载的词典放到,我的文档下面的BabeLua\Completion文件夹中,再进入lua项目,输入代码时就有相应的提示了。 五、安装python-2.7.10,双击安装,下...
  • APKTool批处理版l

    2011-10-26 13:58:55
    APK软件汉化教程 ... 随着Android手机种类的不断丰富,各种应用软件也开始遍地开花,Android用起来也越来越爽了……不过有很多软件都是...根据mNetwork这个控件是否选中决定是否打开基站定位,mNetwork就是界面那个选择框
  • CopyFishOCR是一个识别率很高的工具,可以选择识别多种语言,支持Chrome,Edge,FireFox等主流浏览器,如果你是一个经常找文档资源的人,一定不要错过它~ 091《FasterChrome》鼠标悬停预加载链接让你的Chrome起飞 ...
  • 有很多小伙伴说下载了源码后,直接用浏览器打开却看不到顶部的天气、定位以及左侧设置面板,这是由于这些内容用了jQuery的异步请求($.get()、.load())方法,而这些方法要在运行在服务器上才能实现。如果本地开发,...
  • vc++ 开发实例源码包

    2014-12-16 11:25:17
    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 FreeBird2011Dlg.h 主对话框类头文件 MultiGroup.h 多播组类头文件 UserLink.h 用户链表类头文件 ListenSocket.h 侦听接口...
  • 命令行直接输入 weditor 会自动打开浏览器,输入设备的ip或者序列号,点击Connect即可。 具体参考文章:浅谈自动化测试工具python-uiautomator2 Install daemons to a device (Optional) 电脑连接上一个手机或多个...
  • 本书是第I卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java Web进行程序开发的各个方面的知识和技巧,主要包括Java Web编程基础、文件操作管理、图形图像与多媒体技术、窗体应用...
  • 本书是第I卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java Web进行程序开发的各个方面的知识和技巧,主要包括Java Web编程基础、文件操作管理、图形图像与多媒体技术、窗体应用...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
  • vc++ 应用源码包_4

    热门讨论 2012-09-15 14:38:35
    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...
  • 产品内的所有菜单都已更新,现在多数是停靠式并可以解除停靠,从而可以在桌面四处移动,以便经常使用。新菜单格式提供交互式菜单,例如,可直接从“通信”菜单内发送消息,而不需要启动单独的对话框。 在 11 版中,...
  • 产品内的所有菜单都已更新,现在多数是停靠式并可以解除停靠,从而可以在桌面四处移动,以便经常使用。新菜单格式提供交互式菜单,例如,可直接从“通信”菜单内发送消息,而不需要启动单独的对话框。 在 11 版中,...
  • 本书是第I卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用C#进行程序开发各个方面的知识和技巧,主要包括C#编程基础、Windows窗体、控件应用、文件操作、C#与Office高效开发、图形...
  • 本书是第I卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用C#进行程序开发各个方面的知识和技巧,主要包括C#编程基础、Windows窗体、控件应用、文件操作、C#与Office高效开发、图形...
  • 本书是第I卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用C#进行程序开发各个方面的知识和技巧,主要包括C#编程基础、Windows窗体、控件应用、文件操作、C#与Office高效开发、图形...
  • SessionStorage 存储的数据只在会话期间有效,关闭浏览器则自动删除 Sqlite 一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中 W3C 万维网联盟,创建于1994年,是Web技术领域最具权威...
  • 下载流程:清理进程和数据(包括修改设备信息)、切换IP、登录appID、打开App Store、在App Store搜索应用、下载并安装app(打码)、注销app ID、关闭App Store、卸载app 评论流程:在下载流程的基础上进行评论 ...
  • 但是遇到产品需求,比如过节做个活动,发个购物券之类的需求,由于购物车和商品详情页都有活动,因此会造成组件经常会发生联动。 如何做到各个组件化模块能获取到全局上下文? 组件在lib和app之间进行切换,如何处理...
  • C#编程经验技巧宝典

    热门讨论 2008-06-01 08:59:33
    68 <br>0090 如何获得字母的ASCII码 68 <br>0091 如何根据ASCII码获得字母 68 <br>0092 编程中经常使用的ASCII码 68 <br>0093 获得汉字的区位码 69 <br>0094 如何根据区位码获得汉字 69...
  • iPhone开发秘籍(第2版)--源代码

    热门讨论 2012-12-11 13:51:22
    1.3.3 手机 6 1.3.4 Core Location的差异 6 1.3.5 振动支持和接近传感器 6 1.3.6 处理器速度 6 1.3.7 OpenGL ES 7 1.4 平台限制 7 1.4.1 存储限制 7 1.4.2 数据访问限制 7 1.4.3 内存限制 7 1.4.4 交互...
  • iPhone开发秘籍(第2版)--详细书签版

    热门讨论 2012-12-11 13:42:25
    1.3.3 手机 6 1.3.4 Core Location的差异 6 1.3.5 振动支持和接近传感器 6 1.3.6 处理器速度 6 1.3.7 OpenGL ES 7 1.4 平台限制 7 1.4.1 存储限制 7 1.4.2 数据访问限制 7 1.4.3 内存限制 7 1.4.4 交互...
  • 本书是第I卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用ASP.NET进行程序开发的各种知识和技巧。主要包括ASP.NET技术基础、VS 2008环境搭建,还详细讲解了C#语言设计入门,然后从...
  • 本书是第I卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用ASP.NET进行程序开发的各种知识和技巧。主要包括ASP.NET技术基础、VS 2008环境搭建,还详细讲解了C#语言设计入门,然后从...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

手机经常自动打开定位