天天看點

Robot Framework自動化測試(二)---元素定位

說明:

   不要誤認為robot framework 隻是個web ui測試工具,更正确的了解robot framework是個測試架構,之是以可以拿來做web ui層的自動化是國為我們加入了selenium2的api。比如筆者所處工作中,更多的是拿robot framework來做資料庫的接口測試,當然,需要先将相關的資料庫包導入。

那麼測試架構的本質是什麼?個人覺得有以下幾個方面。

1、比較

測試實質就是“比較”,在測試之前需要先寫用例,假設經過各種操作之後會得到一個預期的結果,然後,在測試的過程中按照用例的步驟會得到一個實際的結果,拿實際結果與預期結果比較。進而且進一步判斷用例的成功與失敗。

2、用例的組織

為什麼要組職用例,因為用例有很多條,我們或在一個檔案中寫多條用例,或多個檔案中寫多條用例,總之要很好的把這些用例組織起,自動化用例是給程式去跑的,是以,更應該規範的組織起來。

3、執行結果展示

用例跑完了,成功了,失敗了?用例執行到哪一步失敗了?總要把這些資訊展示給使用者吧。

=============

回到主題,在robot framework中元素的定位。

  因為robot framework 引入的selenium2 包,是以,假如我們學過selenium 的話,定位是一樣的。因為沒找到相關資料,是以,經過驗證id 、name ,xpath 、css 四種定位方式是可以的,尤其後兩種是“萬能的”,是以可以解決99%的定位問題。

id 和name 定位                                     

  假如把一個元素看作一個人的話,id 和name可以看作一個人的身份證号和姓名。當然,這些屬性值是否唯一要看前端工程師如何設計了。

百度搜尋框和搜尋按鈕

Robot Framework自動化測試(二)---元素定位
Robot Framework自動化測試(二)---元素定位

根據上面的例子,百度輸入框可以取id 或 name進行定位。(前提是id和name的值在當頁面上唯一)

id = kw1

name = wd

在robot framework 中就是這樣寫的:

input text

id=kw1

robot framework學習

name=wd

input text 用于輸入框的關鍵字,“robot framework學習”是要給輸入框輸入的内容。

百度按鈕隻id資料可以利用:

id=su1

click button

click button是按鈕點選的關鍵字。

xpath定位                               

  假如,一個人沒身份證号沒名字怎麼找呢?想想你是怎麼找朋友吃飯的,他手機不通,電話不回呢?直接上他家去呗,那你一定有他家住址,xx市xx區xx路xx号。xpath 就可以通過這種層級關系找到元素。

來看看百度輸入框在整個頁面上的位置吧:

Robot Framework自動化測試(二)---元素定位
Robot Framework自動化測試(二)---元素定位

1、xpath的絕對路徑:

xpath = /html/body/div[1]/div[4]/div[2]/div/form/span[1]/input 

我們可以從最外層開始找,html下面的body下面的div下面的第4個div下面的....input标簽。通過一級一級的鎖定就找到了想要的元素。

2、xpath的相對路徑:

絕對路徑的用法往往是在我們迫不得已的時候才用的。大多時候用相對路徑更簡便。

2.1、元素本身:

xpath同樣可以利用元素自身的屬性:

xpath = //*[@id=’kw1’]

//表示某個層級下,*表示某個标簽名。@id=kw1 表示這個元素有個id等于kw1 。

當然,一般也可以制定标簽名:

xpath = //input[@id=’kw1’]

元素本身,可以利用的屬性就不隻局限為于id和name ,如:

xpath = //input[@type=’text’]

xpath = //input[@autocomplete=’off’]

但要保證這些元素可以唯一的識别一個元素。

2.2、找上級:

  當我們要找的一個人是個剛出生的嬰兒,還沒起名子也沒有入戶口(身份證号),但是你會永遠跟在你父親的身邊,你的父親是有唯一的名字和身份證号的,這樣我們可以先找到你父親,自然就找到你的。

元素的上級屬性為:

找爸爸:

xpath = //span[@class=’bg s_ipt_w’]/input

如果爸爸沒有唯一的屬性,可以找爺爺:

xpath = //form[@id=’form1’]/span/input

這樣一級一級找上去,直到html ,那麼就是一個絕對路徑了。

2.3、布爾值寫法:

  如果一個人的姓名不是唯一的,身份證号也不是唯一的,但是同時叫張三 并且 身份證号為123 的人卻可以唯一的确定一個人。那麼可以這樣寫:

xpath = //input[@id=’kw1’ and @name=’wd’]

可以and ,當然也可以or :

xpath = //input[@id=’kw1’ or @name=’wd’]

但or的實際意義不太。我們一般不需要說,找的人名字或者叫張三,或者身份證号是123 也可以。

robot framework 中的寫法:

css定位                           

   css的定位更靈活,因為他它用到的更多的比對符和規格。

<a href="http://www.w3school.com.cn/cssref/css_selectors.asp">http://www.w3school.com.cn/cssref/css_selectors.asp</a>

選擇器

例子

例子描述

<a href="http://www.w3school.com.cn/cssref/selector_class.asp">.class</a>

.intro

選擇 class="intro" 的所有元素。

<a href="http://www.w3school.com.cn/cssref/selector_id.asp">#id</a>

#firstname

選擇 id="firstname" 的所有元素。

<a href="http://www.w3school.com.cn/cssref/selector_all.asp">*</a>

*

選擇所有元素。

<a href="http://www.w3school.com.cn/cssref/selector_element.asp">element</a>

p

選擇所有 &lt;p&gt; 元素。

<a href="http://www.w3school.com.cn/cssref/selector_element_comma.asp">element,element</a>

div,p

選擇所有 &lt;div&gt; 元素和所有 &lt;p&gt; 元素。

<a href="http://www.w3school.com.cn/cssref/selector_element_element.asp">element element</a>

div p

選擇 &lt;div&gt; 元素内部的所有 &lt;p&gt; 元素。

<a href="http://www.w3school.com.cn/cssref/selector_element_gt.asp">element&gt;element</a>

div&gt;p

選擇父元素為 &lt;div&gt; 元素的所有 &lt;p&gt; 元素。

<a href="http://www.w3school.com.cn/cssref/selector_element_plus.asp">element+element</a>

div+p

選擇緊接在 &lt;div&gt; 元素之後的所有 &lt;p&gt; 元素。

<a href="http://www.w3school.com.cn/cssref/selector_attribute.asp">[attribute]</a>

[target]

選擇帶有 target 屬性所有元素。

<a href="http://www.w3school.com.cn/cssref/selector_attribute_value.asp">[attribute=value]</a>

[target=_blank]

選擇 target="_blank" 的所有元素。

<a href="http://www.w3school.com.cn/cssref/selector_attribute_value_contain.asp">[attribute~=value]</a>

[title~=flower]

選擇 title 屬性包含單詞 "flower" 的所有元素。

<a href="http://www.w3school.com.cn/cssref/selector_attribute_value_start.asp">[attribute|=value]</a>

[lang|=en]

選擇 lang 屬性值以 "en" 開頭的所有元素。

同樣以百度輸入框的代碼,我們來看看css如何定位。

id定位:

css=#kw1

class定位:

css=.s_ipt

其它屬性:

css=[name=wd]

css=[type=text]

css=[autocomplete=off]

父子定位:

css=span &gt; input

css=form &gt; span &gt; input

根據标簽名定位:

css=input

  同樣一個元素,根基css的不同規則,可能有幾十上百種寫法。css更靈活強大,但是相比xpath 的學習成本為更高。但是css和xpath 兩種定位方式是一定要學會一種,不然你的自動化工作更無法開展。

Robot Framework自動化測試(二)---元素定位