開發環境建置
建立目錄
$ mkdir <DIR-NAME>
建立虛擬環境
$ conda create — name <ENV-NAME> python=<PYTHON-VER>
參數安裝相關函式庫
$ conda install -c conda-forge nodejs jupyterlab robotframework-seleniumlibrary geckodriver python-chromedriver-binary pillow lunr$ pip install robotkernel robotframework-seleniumscreenshots robotframework-selenium2library nbimporter
安裝 Jupyter lab robot 編輯器
$ jupyter labextension install jupyterlab_robotmode
安裝 robotmode extension
點選 Extension Manager > Enable 按鈕
搜尋並安裝 robotmode extension
安裝 chromedriver
檢查電腦上安裝的 Chrome 版本 (說明>關於 Google Chrome),前往 https://sites.google.com/a/chromium.org/chromedriver/downloads 下載對應的 chromedriver,再丟到所使用的virtual environment 下 (C:\Users\<USER_NAME>\Anaconda3\envs\RPA)。
如果看到下列錯誤訊息,就是代表你下載的chromedriver 版本和 PC 上不匹配
Selenium message:session not created: This version of ChromeDriver only supports Chrome version XX
測試開發環境
- Launcher 上選擇 Robot Framework notebook
- 執行下列 Test Cast
*** Settings ***
Library SeleniumLibrary*** Test Cases ***
Go to google.com
Open Browser https://www.google.com chrome
千萬切記, Open Browser keyword 和後面參數必須間隔兩個以上的空白 (keyword 才是間隔一個空白),否則會誤認參數為keyword 的一部分。
如果一切順利,一個獨立的 Chrome 將會被開啟。
Selenium2Library 介紹
Selenium2Library 是最常用來做網站測試的 Robot Framework 的函式庫
常用 Keyword
Click Button locatorClick Element locatorInput Text locator, textOpen Browser url, browser=firefox, alias=None, remote_url=False, desired_capabilities=None, ff_profile_dir=NoneClose Browser
定位
Keyword 中使用 locator 已定位要操作的網頁元件, Selenium2 Library 支援多種 locator 策略
- Default locator strategy
- Explicit locator strategy
- Implicit XPath strategy
Default locator strategy
Click Element example # Match based on id or name=example.Click Link example # Match based on link text and href=example.Click Button example # Match based on id, name or value=example.
Explicit locator strategy
Click Element id:examplenamename #Element id=exampleClick Element name:example #name attribute=exampleClick Element identifier:example #Either id or nameClick Element class:example #Element class=exampleClick Element tag:div #Tag name=div Click Element xpath://div[@id="example"] #XPath expression,<div> with id attribute=exampleClick Element css:div#example #CSS selector, <div> with id attribute=exampleClick Element dom:document.images[5] #DOM expression,5th image elementClick Element link:The example #Exact text a link has The example
Implicit XPath strategy
參數以 // 或 (// 起始的,當為 XPath 表示式,不需要加上 xpath prefix
Click Element //div[@id=”foo”]//h1Click Element (//div)[2]
何謂 XPath?
基本語法
/bookshelf # root 下第一層的 <bookshelf>//book # 所有 <book>.book # 從目前的節點選取..book # 選取目前節點的parent//@price # 所有有 price attribute 的 element
條件式
/bookshelf/book[1] # 選取<bookstore>的children中第一個<book>/bookshelf/book[last()] # 選取<bookshelf>的children中最後一個<book>/bookshelf/book[last()-1] # 選取<bookshelf>的children中最後第二個<book>/bookshelf/book[position()<3] # 選取<bookshelf>的children中前兩個/bookshelf/book[@price>100.00]# 選取<bookshelf>的children中的<book>,其下的 price attribute 大於100//a[contains(text(),'Robot')] # 選取文字包含 Robot的<a>//div[@id=”foo”]//h1 # 所有 id=foo 的 <div> 下的 <h1>//*[contains(text(), "example")] # 所有包含文字為example 的 element.
萬用字元
/bookshelf/* # 選擇<bookshelf>下的所有children element節點//* # 選擇文件中的全部節點//book[@id=123] # 選擇文件中全部的含有id屬性等於123的<book>
串接多個條件
/bookshelf/book/title | //price # 選擇文件中<bookshelf>中的<book>中的<title>及全部的<price>
額,有沒有更簡單取得 XPath的方式?
在網頁上選取要取得 XPath 的元件,按下右鍵,選單上選取 「檢查」,Chrome 會打開 Chrome Dev Tool /Elements 頁籤,並指向對應 Source 上對應 Element,然後選擇「Copy > Copy XPath」即可
要如何得知動態元件的 XPath?
很多時候,網頁元件是動態產生的,需要特定動作才能觸發,動作結束元件也就跟著消失,這時候就必須使用 「Break On」功能了
先選取動態元件的 parent 元件,按下右鍵,選單上選取 「檢查」,然後選取 「Break on> subtree modification」,或者全選。
接下來只要任何 child 元件變動,均會進入斷點逐步執行,切回 Elements 頁籤觀察,等到動態元件產生,一樣然後選擇「Copy > Copy XPath」取得 XPath。