博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
robotframwork的WEB功能测试(一)—切换window窗口
阅读量:6913 次
发布时间:2019-06-27

本文共 3138 字,大约阅读时间需要 10 分钟。

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}

   

     本章大致结束,后面有新的更好的,回慢慢补充。

    

 

转载于:https://www.cnblogs.com/testwang/p/6097621.html

你可能感兴趣的文章
【Spark】SparkStreaming-如何使用checkpoint
查看>>
Django REST framework+Vue 打造生鲜超市(四)
查看>>
maven工程的多环境配置方案(profile)
查看>>
react 使用 moment 进行 日期格式化
查看>>
Node.js调用mysql的存储过程
查看>>
java获取访问路径、域名、项目名、请求入参
查看>>
nginx:not a directory
查看>>
【M9】利用destructors避免泄漏资源
查看>>
怎样让操作系统的虚拟机退出全屏?
查看>>
关于MySQL里的found_row()和row_count()解释及用法 [复制链接]
查看>>
SQL Server 2008 R2 导出数据脚本的方法
查看>>
TCP的定时器
查看>>
php内核分析(六)-opcode
查看>>
twisted: echo server
查看>>
iOS地图的注释(Annotation)
查看>>
存储过程中递归调用
查看>>
android INSTALL_FAILED_INSUFFICIENT_STORAGE错误
查看>>
android开发之第三方集成之OAUTH教程篇
查看>>
spring+mybatis 多数据源整合
查看>>
HTML5 网络拓扑图整合 OpenLayers 实现 GIS 地图应用
查看>>