1.RobotFramework自動化框架
-
為什么要做自動化?:
前提:主流程穩定,周期長,腳本可重復利用。
- 節省人力資源
- 提高效率
- 面試需要。。。哈哈
-
什么是RobotFramework:
基於Python的關鍵字驅動的自動化框架。
- 基於Python:就是由python語言開發的這個框架。
- 關鍵字驅動:關鍵字驅動測試又稱為表格驅動測試,是自動化測試的一種方法,是數據測試的一種改進方法。關鍵字驅動主要包括測試步驟、測試步驟中的對象,測試對象執行的動作,測試對象需要的數據
- 自動化框架?:是應用於自動化測試,框架提供可重用的基礎自動化測試平台,提供自動化測試執行和管理功能的組織架構。
-
pip的常用方法:
pip 是 Python 包管理工具,該工具提供了對Python 包的查找、下載、安裝、卸載的功能。以下在win10_x64 cmd中操作:
- 安裝:pip install 包名
- eg:pip install robotframework
- 安裝指定版本:pip install 包名==版本號
- eg:pip install robotframework==1.7.4.1
- 升級指定包:pip install --upgrade 包名
- eg:pip install --upgrade robotframework
- 卸載:pip uninstall 包名
- eg:pip uninstall robotframework
- 搜索安裝包:pip search 包名
- eg:pip search robotframework
- 查看當前電腦上已經安裝的包:pip list
- 查看當前電腦上可以升級的包:pip list -o
- 安裝:pip install 包名
-
rf的安裝:
- 安裝RF自動化框架:pip install robotframework
- 安裝RF自動化框架IDE:pip install robotframework-ride
- 安裝wxpython(ride依賴wxpython):pip install wxpython
- ps:實際上新版本pip在安裝ride時會自動安裝所需依賴,也就是wxpython
- 版本信息:Win10 x64 + Python 3.7.7 + rf 3.1.2 + ride 1.7.4.1 + wxpython 4.0.7.post2
- ps:ride 1.x版本不支持Python 3.8及以上,ride 2.x(開發中)支持Python 3.8
- rf日志中文亂碼解決方法:修改文件 python安裝目錄下 \Lib\site-packages\robotide\contrib\testrunner\testrunnerplugin.py 第 565 行,將 SYSTEM 改成 OUTPUT,重啟ride工具。
-
關鍵字:
- 待續
-
元素定位:
-
id:以百度搜索輸入框為例
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
在RF中寫法:id=kw
-
name:以百度搜索輸入框為例
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
在RF中寫法:name=wd
-
xpath:Xml Path Language
-
絕對路徑:從html根部逐級(從上至下)查找
/html/body/div[1]/div[1]/div[3]/div/div/form/span[1]/input
在RF中寫法:xpath=/html/body/div[1]/div[1]/div[3]/div/div/form/span[1]/input
-
相對路徑:根據節點的上下文進行查找
eg://div/form/span/input 這里是在html中找一個div,div里面包含一個form,form包含一個span,span包含一個input,找有這樣一個四層的關系的input標簽,要注意如果html中有多個符合這種層級關系的input,會默認選第一個,也就是說這種方式未必是完全准確的。
xpath相對定位我們還可以根據元素的屬性來查找:
eg://div/form/span[1]/input[@type] 這里是找符合這樣一個層級關系並且有'type'這個屬性的input標簽
在RF中寫法:xpath=//div/form/span[1]/input[@type]
eg://div/form/span[1]/input[@type='submit'] 這里是找符合這樣一個層級關系並且'type'這個屬性的值為'submit'的input標簽
在RF中寫法:xpath=//div/form/span[1]/input[@type='submit']
eg://div/form/span[1]/input[contains(@type,'sub')] 這里是找符合這樣一個層級關系並且'type'這個屬性的值包含'sub'的input標簽
在RF中寫法:xpath=//div/form/span[1]/input[contains(@type,'sub')]
以上是根據屬性,如果是下面這樣的a標簽,我們還可以根據鏈接文字來進行定位
<a href="https://ssxxlive.top">點我</a>
eg://a[contains(text(),'點我')] 這樣就是找所有a標簽並且文字為'點我'的元素了
在RF中寫法:xpath=//a[contains(text(),'點我')]
-
小技巧:
在Chrome-F12-Console中根據Xpath尋找元素:使用$x(""),引號中填寫xpath路徑,如$x("/html/body/div[1]/div[1]/div[3]/div/div/form/span[1]/input")
-
-
css:
-
id:以百度搜索輸入框為例
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
在RF中寫法:css=#kw
-
class:以百度搜索輸入框為例
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
在RF中寫法:css=.s_ipt
-
css根據屬性定位:
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
[id='kw'] 表示查找id值為'kw'的元素
[name^='w'] 表示查找name值為'k'開頭的元素
[class$='ipt'] 表示查找class值為'ipt'結尾的元素
[autocomplete*='f'] 表示查找autocomplete值中包含'f'的元素
[id='kw'] [name^='w'] 表示查找id值為'kw'並且name值為'k'開頭的元素
在RF中寫法:css=[id='kw'] [name^='w']、css=[class$='ipt']、
css=[maxlength='255']、css=[autocomplete='off']
ps:id和class也是屬性,只是在css中針對id和class多了一種簡單的寫法,如上面的
css=#kw、css=.s_ipt
-
css根據標簽定位:
-
input
表示查找當前頁面所有input標簽
在RF中寫法:css=input
-
a,input
表示查找當前頁面所有a標簽和input標簽
在RF中寫法:css=a,input
-
span input
表示查找span標簽下的所有input標簽,哪怕是span下下級的input
在RF中寫法:css=span input
-
span>input
表示查找父元素為span標簽的所有input標簽,注意和span input的區別
在RF中寫法:css=span>input
-
span+input
表示查找緊挨在span元素后的第一個input元素
在RF中寫法:css=span+input
-
span~input
表示查找緊挨在span元素后的所有input元素
在RF中寫法:css=span~input
ps:其實大家都知道,因為頁面上只依靠標簽定位的話重復的可能性太大了,所有我們可以采用 標簽 + 屬性 的方式來進行定位
例如 span>input[id='kw'][name^='w'] 意思是查找所有父標簽為span的input標簽,並且該標簽中有屬性id的值為kw且屬性name的值為w開頭
在RF中寫法:css=span>input[id='kw'][name^='w']
-
-
小技巧:
在Chrome-F12-Console中根據css尋找單個元素:
使用$(""),引號中填寫css選擇器,如$("span>input[id='kw'][name^='w']")
在Chrome-F12-Console中根據css尋找多個元素:
使用$$(""),引號中填寫css選擇器,如$$("span>input[id='kw'][name^='w']")
-
-