原文地址:http://www.cnblogs.com/testwang/p/6097621.html
robotframwork的WEB功能测试(一)—切换window窗口
selenium2library提供的切换到新窗口的关键字,只有select window,而且也只能根据title、name、url去定位。如下图所示,明显在实际使用中是不够的。
所以这里总结了一下其他的方法。
一、 拓展selenium2library库。
即修改selenium的源码。
1. *\ Python27\Lib\site-packages\Selenium2Library\locators:找到windowmanager.py文件。
打开编辑,增加方法
|
1
2
3
4
5
6
7
8
|
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文件。
打开编辑,增加方法
|
1
2
3
4
5
6
7
8
9
10
|
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”关键字
|
1
2
3
4
5
6
|
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 新窗口”关键字
|
1
2
3
4
5
6
7
8
9
|
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新窗口/原窗口”关键字
|
1
2
3
4
5
6
7
8
|
[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个关键字,可能有些人会不是很懂,不是很理解到底怎么切换的,所以这里写个调用的方法,方便理解。
|
1
2
3
4
5
6
|
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”的窗口。
里面的逻辑,把代码带入看,
|
1
|
<span
style="font-size:
16px"><strong><span
style="color:
#ff0000">
select新窗口 click element ${item}带入看</span></strong></span>
|
${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}
本章大致结束,后面有新的更好的,回慢慢补充。