robotframwork的WEB功能测试(一)—切换window窗口
selenium2library提供的切换到新窗口的关键字,只有select window,而且也只能根据title、name、url去定位。如下图所示,明显在实际使用中是不够的。
所以这里总结了一下其他的方法。
一、 拓展selenium2library库。
即修改selenium的源码。
1. *\ Python27\Lib\site-packages\Selenium2Library\locators:找到windowmanager.py文件。
打开编辑,增加方法
def select_by_handle(self, browser, toHandle):
browser.switch_to_window(toHandle) def get_window_handles(self, browser):
return [ window_info[0] for window_info in self._get_window_infos(browser) ] def get_current_window_handle(self, browser):
return browser.get_current_window_handle()
2. *:\Python27\Lib\site-packages\Selenium2Library\keywords:找到_browsermanagement.py文件。
打开编辑,增加方法
def select_window_by_handle(self, locator=None):
self._window_manager.select_by_handle(self._current_browser(), locator) def get_window_handles(self):
"""Returns and logs handles of all windows known to the browser."""
return self._log_list(self._window_manager.get_window_handles(self._current_browser())) def get_current_window_handle(self):
"""Returns and logs handle of current window known to the browser."""
return self._log_list(self._window_manager.get_current_window_handle(self._current_browser()))
二、编写自己的关键字
使用robotframework:
1. 创建“Index Item From List”关键字
Index Item From List
[Arguments] ${element} @{items}
${index}= Set Variable ${0}
: FOR ${item} IN @{items}
\ Return From Keyword If '${element}'=='${item}' ${index}
Return From Keyword ${-1}
2. 创建“get 新窗口”关键字
get新窗口
[Arguments] @{win_all}
@{win_all_curr} Get Window Handles
${idx}= Set Variable ${-1}
: FOR ${win} IN @{win_all_curr}
\ ${idx} Index Item From List ${win} @{win_all}
\ Return From Keyword If ${idx} == ${-1} ${win}
\ Comment Should be True 0 == 1 #No win handle or no new handle
Should Be True ${idx} msg=No Window handles or no new handle
3. 创建“select新窗口/原窗口”关键字
[Arguments] ${keyword} ${item}
${win_curr}= Get Current Window Handle
@{win_hds}= Get Window Handles
Run Keyword ${keyword} ${item}
sleep 3
${win_child}= get新窗口 @{win_hds}
Select Window By Handle ${win_child}
[Return] ${win_child} # ${win_curr} |也可以返回这个,就是返回原窗口
4. 使用我们写好的关键字吧。
看上面3个关键字,可能有些人会不是很懂,不是很理解到底怎么切换的,所以这里写个调用的方法,方便理解。
102002-随机打开箱包宝贝
click element css=li>a[href='#/list/?category1=热卖箱包']
sleep 3
@{items} Get Webelements css=.item_picture>a[href]
${item}= 随机选择元素赋值 @{items}
select新窗口 click element ${item}
例子说明:1. 先是打开了一个箱包的新窗口;
2. 第3、4行代码都是随机获得一个href的链接。
3. 最后一行,就是调用我们的“select新窗口”来切换到新打开的“href”的窗口。
里面的逻辑,把代码带入看,
select新窗口 click element ${item}带入看
${win_curr}= Get Current Window Handle #获得当前窗口
@{win_hds}= Get Window Handles #获得当前所有的窗口
Run Keyword click element ${item} #带入后,这里就是打开我们的href新窗口
sleep 3
${win_child}= get新窗口 @{win_hds} #get新窗口会获取打开href新窗口后的所有窗口,会比@{win_hds}多这么一个href。这样就可以循环得到它了。
Select Window By Handle ${win_child}
[Return] ${win_child}
本章大致结束,后面有新的更好的,回慢慢补充。
robotframwork的WEB功能测试(一)—切换window窗口的更多相关文章
- 使用MVVM DataTriggers在WPF XAML视图之间切换/Window窗口自适应内容大小并居中
原文 使用MVVM DataTriggers在WPF XAML视图之间切换 相关文章: http://www.technical-recipes.com/2016/switching-between- ...
- robotframwork的WEB功能测试(二)—登录
小结一下截止到目前,我接触的系统的登录模拟. 1. 带token的session:这种用抓包工具很容易抓到,使用这个链接就可以模拟已登录. 2. 使用cookie:有的系统是判断cookie来判断是否 ...
- web自动化之浏览器的窗口切换
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from seleni ...
- Window 窗口类
窗口类 WNDCLASS 总结 总结为下面的几个问题: . 什么是窗口类 . 窗口类的三种类型 . 窗口类各字段含义 . 窗口类的注册和注销 . 如何使用窗口类,子类化.超类化是什么 下面分别描述: ...
- 【转载】Window 窗口层次关系
相信在Window 下面编程的很多兄弟们都不是很清楚Window 中窗口的层次关系是怎么样的,这个东西很久已经研究过一下,后来又忘记了,今天又一次遇到了这个问题,所以便整理一下.下面就说说Window ...
- [转载]ExtJs4 笔记(9) Ext.Panel 面板控件、 Ext.window.Window 窗口控件、 Ext.container.Viewport 布局控件
作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...
- JavaScript:window窗口对象
在JavaScript中,window表示的就是一个窗口对象.所以在整个处理过程之中,所有的操作都是以弹框为主 的.范例1:使用警告框 <script type="text/javas ...
- (转载)JavaScript中的Window窗口对象
(转载)http://www.ijavascript.cn/jiaocheng/javascript-window-65.html 例子: <html> <head> < ...
- iOS切换window根控制器 (转)
转自linfengwenyou 在运行过程中更改根控制器的方法:(假设:A为当前根控制器,B为要设的根控制器) 方法一: 1. appdelegate.m中 self.window = [[UIWin ...
随机推荐
- [C语言] 变量和数据类型和整数和字符
1.数据类型和变量: 数据是放在内存中的,明确三件事:数据存储在哪里.数据的长度以及数据的处理方式 int n;数据类型指明了数据的长度和处理方式,变量名指明了数据存储在哪里 2.数据长度:是指数据占 ...
- 撩课-Python-每天5道面试题-第8天
一. 解释下什么是闭包? 有怎样的场景作用? 概念 在函数嵌套的前提下 内层函数引用了外层函数的变量(包括参数) 外层函数, 又把 内层函数 当做返回值进行返回 这个内层函数+所引用的外层变量, 称为 ...
- JavaScript根据国家二字码获取国家全称
function getCountryNameByCode(code) { var countryName = ''; switch(code) { case "US": coun ...
- apache-kylin 权威指南—读书笔记
1. 概述 kylin 是 OLAP 引擎,采用多维立方体预计算技术,可将大数据的 SQL 查询速度提升到亚秒级别. 需求: 虽然像 spark,hive 等使用 MPP 大规模并行处理和列式存储的方 ...
- 记录一次teamview无法远程连接对方teamview的过程
问题描述: teamviewer 提示 超时后连接被阻断.您的许可证对您与伙伴的最大话时间有所限制...... 解决方法: 1.先将自己的teamview完全卸载,连同安装目录一起删除.尽量卸载完全 ...
- Django2.0之后使用外键时遇到 __init__() missing 1 required positional argument: 'on_delete'
1.Django2.0之后使用外键时遇到 __init__() missing 1 required positional argument: 'on_delete' 需要在外键创建时给on_dele ...
- cf1090 I.Minimal Product(贪心)
题意 题目链接 给出长度为\(n\)的序列\(a\),序列中的元素取值为\([-2e9, 2e9]\) 找到两个位置\((i, j) (i <j, a[i] < a[j])\),最小化\( ...
- System.out.println与System.err.println的区别
public class Test2 { static { System.out.println("1"); } { System.out.println("2" ...
- js中的正则表达式的运用
正则表达式是一个拆分字符串并查询相关信息的过程:是现代开发中很重要的一环.作为一个web开发人员必须牢牢掌握这项技能,才能尽情得在js中驰骋. 1.创建正则表达式: 正则表达式(regular exp ...
- android热加载随记
在我们日常的开发过程中,程序难免会出现BUG,一般有集中处理方式,发布新版本APP让用户来升级,或者打补丁来修复bug 前者本文在这里不错讨论,打补丁升级又分为两种一种是需要重启应用,一种是不需要.不 ...