1. 程式人生 > 其它 >【robotframework之六】切換到新的視窗

【robotframework之六】切換到新的視窗

一、參考資料

https://www.cnblogs.com/testwang/p/6097621.html

二、切換及定位關鍵字

怎麼切換視窗呢?首先可以F5,檢視可以用到的關鍵字:

Select Window:選擇瀏覽器視窗匹配定位器。如果找到該視窗,所有後續命令都將使用所選視窗,直到再次使用該關鍵字。如果沒有找到視窗,則此關鍵字將失敗。返回前一個視窗控制代碼,並可用於稍後返回該控制代碼。

找到切換視窗的關鍵字後,我們要繼續尋找定位視窗的關鍵字,同樣F5,如下圖:

Get Window Handles:以列表的形式返回所有當前視窗控制代碼。

Get Window Identifiers:返回並記錄所有已知瀏覽器視窗的id屬性。

Get Window Names:返回和記錄所有已知瀏覽器視窗的名稱。

Get Window Position:返回當前視窗的位置。

Get Window Size:以整數形式返回當前視窗的寬度和高度。

Get Window Titles:返回和記錄所有已知瀏覽器視窗的標題。

三、Get Window Handles切換視窗

1、開啟CSDN的首頁

https://www.csdn.net/

2、點選首頁的登入連結,進入登入頁面

通過如上截圖,我們可以看到,新開的頁面沒有定義ID和name,檢視原始檔的head,title也是一致的:

所以,我們可以排除id、name和title的定位方式,使用控制代碼來定位。

3、通過Get Window Handles獲取視窗所有控制代碼

首先檢視一下整個登入的指令碼,如下圖:

可以很明顯看到,select window by handle關鍵字為黑色,代表該關鍵字不存在,這裡我們需要擴充套件Selenium2Library庫,參考如下地址的資料:https://www.cnblogs.com/testwang/p/6097621.html

四、擴充套件Selenium2Library庫
1、編輯windowmanager.py檔案
首先,進入Selenium2Library資料夾,我本地的地址:C:\Python27\Lib\site-packages\Selenium2Library,資料夾裡面只有__init__.py檔案,開啟該檔案

可以看到,它是引用了SeleniumLibrary,所以我們到SeleniumLibrary資料夾找到相對應的檔案進行更改即可;進入地址:C:\Python27\Lib\site-packages\SeleniumLibrary\locators,可以看到windowmanager.py檔案,編輯該檔案,加上如下程式碼:

2、編輯browsermanagement.py檔案

同樣進入地址:C:\Python27\Lib\site-packages\SeleniumLibrary\keywords

編輯browsermanagement.py,加上如下程式碼:

五、根據參考地址程式碼擴充套件Selenium2Library庫後依然出現的問題

1、在windowmanager.py和browsermanagement.py中新增方法後,重新開啟robotframework,select window by handle關鍵字依然為黑色
解決方案:

1.1、檢視browsermanagement.py檔案,發現每個關鍵字函式前都存在@keyword,同樣在每個函式前加上:

1.2、重新ride.py開啟robotframework,select window by handle關鍵字變為藍色

2、執行登入指令碼報錯,AttributeError: 'BrowserManagementKeywords' object has no attribute '_current_browser'

解決方案:

2.1、將_current_browser()改為drivers.current,如下圖:

2.2、重新開啟robotframework,執行登入指令碼,執行成功

六、完結

綜上,登入指令碼執行成功,成功定位並切換到了新的視窗,F5檢視關鍵字,select window by handle也展示在了關鍵字列表

具體引用方法:

  1. ${handles} Get Window Handles #獲得控制代碼列表
  2. select window by handle ${handles[1]} #根據控制代碼索引切換到新開啟的視窗,索引從0開始,0代表原頁面,1代表新開啟的頁

七、版本更新後原始碼不適用新的規則集錦
執行之後報錯,

提示: _get_window_infos() takes 1 positional argument but 2 were given;

更改 windowmanager.py檔案,將self._get_window_infos(browser)中的browser去掉即可;

如下圖: