1. 程式人生 > >Robot Framework自動化測試二(元素定位)

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

百度一 ble 文件中 成功 .cn 位置 solid web lock

前言

在學習的過程中,可能會誤認為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可以看作一個人的身份證號和姓名。當然,這些屬性值是否唯一要看前端工程師如何設計了。

百度搜索框和搜索按鈕

<input id="kw1" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">
……
<input id="su1" class="bg s_btn" type="submit" onmouseout="this.className=‘bg s_btn‘" onmousedown="this.className=‘bg s_btn s_btn_h‘" value="百度一下">
……

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

id = kw1

name = wd

在Robot framework 中就是這樣寫的:

Input Text

id=kw

robot framework學習

input text

name=wd

robot framework學習

Input text 用於輸入框的關鍵字,“robot framework學習”是要給輸入框輸入的內容。

百度按鈕只id數據可以利用:

Id=su1

Click Button

id=su

Click Button是按鈕點擊的關鍵字。

xpath定位

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

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

<html>
    <head>
    <body link="#0000cc">
    <div id="wrapper" style="display: block;">
        <div id="debug" style="display:block;position:absolute;top:30px;right:30px;border:1px solid;padding:5px 10px;"></div>
        <div id="u">
        <div id="head">
        <div id="content" style="display: block;">
            <div id="u1" style="display: block;">
            <div id="m">
                <p id="lg">
                <p id="nv">
                <div id="fm">
                    <form id="form1" class="fm" action="/s" name="f1">
                        <span class="bg s_ipt_wr">
                            <input id="kw1" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">

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、找上級:

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

元素的上級屬性為:

<form id="form1" class="fm" action="/s" name="f1">
  <span class="bg s_ipt_wr">
    <input id="kw1" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">

找爸爸:

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 中的寫法:

Input Text

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

robot framework學習

input text

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

robot framework學習

input text

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

robot framework學習

CSS定位

  Css的定位更靈活,因為他它用到的更多的匹配符和規格。

http://www.w3school.com.cn/cssref/css_selectors.asp

選擇器

例子

例子描述

.class

.intro

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

#id

#firstname

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

*

*

選擇所有元素。

element

p

選擇所有 <p> 元素。

element,element

div,p

選擇所有 <div> 元素和所有 <p> 元素。

element element

div p

選擇 <div> 元素內部的所有 <p> 元素。

element>element

div>p

選擇父元素為 <div> 元素的所有 <p> 元素。

element+element

div+p

選擇緊接在 <div> 元素之後的所有 <p> 元素。

[attribute]

[target]

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

[attribute=value]

[target=_blank]

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

[attribute~=value]

[title~=flower]

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

[attribute|=value]

[lang|=en]

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

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

<form id="form1" class="fm" action="/s" name="f1">
  <span class="bg s_ipt_wr">
    <input id="kw1" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">

id定位:

css=#kw1

class定位:

css=.s_ipt

其它屬性:

css=[name=wd]

css=[type=text]

css=[autocomplete=off]

父子定位:

css=span > input

css=form > span > input

根據標簽名定位:

css=input

Robot framework 中的寫法:

Input Text

css=#kw1

robot framework學習

input text

css=.s_ipt

robot framework學習

input text

css=[name=wd]

robot framework學習

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

技術分享圖片

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