【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也展示在了關鍵字列表
具體引用方法:
- ${handles} Get Window Handles #獲得控制代碼列表
- 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去掉即可;
如下圖: