Input Text 關鍵字通常用來給輸入框進行輸入操做,該關鍵字接收兩個參數[ locator | text ]。html
示例1:啓動安卓手機上一個APP的MainActivity,在打開Activity,進入界面後,分別向兩個EditText輸入框中輸入12,而且點擊按鈕「計算」來計算出輸入的這兩個數字的乘積。android
APP的界面以下,提供了兩個輸入框,還有一個計算的Button按鈕。ios
在寫這個自動化案例前,咱們可使用安卓SDK提供的Ui Automator Viewer工具來進行這個界面的資源定位。經過定位後,能夠看到第一個EditText輸入框的resource-id爲com.example.calculator:id/factorone,class爲android.widget.EditText,name爲請輸入數字,以下圖所示。web
第二個EditText輸入框的resource-id爲com.example.calculator:id/factortwo,class爲android.widget.EditText,name爲請輸入數字,以下圖所示。數據庫
Button按鈕的resource-id爲com.example.calculator:id/commit,class爲android.widget.Button,name爲計算,以下圖所示。session
Click Button關鍵字用來模擬點擊APP上的一個button按鈕,該關鍵字接收一個參數[ index_or_name ]。app
Open Application http://localhost:4723/wd/hub platformName=Android platformVersion=22 deviceName=98YFBP522VSU app=C:/Users/yongqing/Desktop/app-debug.apk appPackage=com.example.calculator appActivity=MainActivity框架
Input Text id=com.example.calculator:id/factorone 12 函數
Input Text id=com.example.calculator:id/factortwo 12 工具
Click Button 計算
執行結果:
能夠看到已經執行成功,上面是經過resource-id的方式來定位EditText輸入框,而且經過name的方式來定位button按鈕。
下面經過另外一種方式,用name的方式來定位EditText輸入框,經過index的方式來點擊button按鈕
Open Application http://localhost:4723/wd/hub platformName=Android platformVersion=22 deviceName=98YFBP522VSU app=C:/Users/yongqing/Desktop/app-debug.apk appPackage=com.example.calculator
Input Text name=請輸入數字 12
Input Text name=請輸入數字 14
Click Button index=0
執行結果:
在經過index的方式來點擊button按鈕的時候,須要注意index的取值,不要和經過Ui Automator Viewer工具看到的index混淆,先看一段AppiumLibrary庫的源碼,在這裏選取了源碼中的三個函數。從以下三個函數中能夠看到click_button關鍵字支持name和index兩種方式來定位一個button,在使用index的時候,是根據class_name,即經過android.widget.Button這個class_name來找出當前界面中有幾個button按鈕(源碼中經過elements = self._find_elements_by_class_name(class_name)來尋找有幾個button按鈕,就會返回幾個element),而後每一個 button按鈕按照index的方式來取出(源碼中經過element = elements[index]來獲得具體的一個button按鈕)。
AppiumLibrary庫函數1:
def click_button(self, index_or_name):
""" Click button """
_platform_class_dict = {'ios': 'UIAButton',
'android': 'android.widget.Button'}
if self._is_support_platform(_platform_class_dict):
class_name = self._get_class(_platform_class_dict)
self._click_element_by_class_name(class_name, index_or_name)
AppiumLibrary庫函數2:
def _click_element_by_class_name(self, class_name, index_or_name):
element = self._find_element_by_class_name(class_name, index_or_name)
self._info("Clicking element '%s'." % element.text)
try:
element.click()
except Exception as e:
raise 'Cannot click the %s element "%s"' % (class_name, index_or_name)
AppiumLibrary庫函數3:
def _find_element_by_class_name(self, class_name, index_or_name):
elements = self._find_elements_by_class_name(class_name)
print 'elements:"%s"' % elements
if self._is_index(index_or_name):
try:
index = int(index_or_name.split('=')[-1])
print 'index:"%s"' % index
element = elements[index]
print 'element:' , element
except (IndexError, TypeError):
raise 'Cannot find the element with index "%s"' % index_or_name
else:
found = False
for element in elements:
self._info("'%s'." % element.text)
if element.text == index_or_name:
found = True
break
if not found:
raise 'Cannot find the element with name "%s"' % index_or_name
下面這個界面中,放入了兩個button按鈕,一個button按鈕是計算按鈕,一個button按鈕是取消按鈕。
在執行時,經過elements = self._find_elements_by_class_name(class_name)獲得全部的button按鈕後,再用print 'elements:"%s"' % elements能夠打印出獲取到的elements,也就是全部的button,從以下的輸出結果能夠看到,elements會存放在一個list列表中,該list 列表中,共有兩個元素,表明取到了兩個button按鈕。
打印輸出結果:
elements:"[<appium.webdriver.webelement.WebElement (session="8e85c12f-2243-4b82-abfc-d091fddbed8b", element="4")>, <appium.webdriver.webelement.WebElement (session="8e85c12f-2243-4b82-abfc-d091fddbed8b", element="5")>]"
當index 爲0時,會取到第一個按鈕,也就是「計算」這個button按鈕,當index爲1時,會取到第二個按鈕,也就是「取消」這個button按鈕。當index超過1後,那麼就會報錯啦,此時源碼中會經過raise 'Cannot find the element with index "%s"' % index_or_name來拋出一個異常,告訴使用者,不能經過當前的index獲取到element(也就是此時沒法獲取到任何button按鈕啦)。
示例2:經過xpath的方式定位元素,這裏依舊用上面的APP界面爲示例。
用xpath的方式定位第一個EditText輸入框和第二個EditText輸入框,示例以下:
Open Application http://localhost:4723/wd/hub platformName=Android platformVersion=22 deviceName=98YFBP522VSU app=C:/Users/yongqing/Desktop/app-debug.apk appPackage=com.example.calculator appActivity=MainActivity
Input Text xpath=//android.widget.EditText[1] 12
Input Text xpath=//android.widget.EditText[2] 14
Click Button 計算
執行結果:
Starting test: RobotFrameworkTest1.TestSuite5.TestCase005
20170510 13:45:07.381 : INFO : Typing text '12' into text field 'xpath=//android.widget.EditText[1]'
20170510 13:45:07.381 : INFO : msg:find xpath=//android.widget.EditText[1]
20170510 13:45:07.381 : INFO : prefix: xpath
20170510 13:45:07.397 : INFO : criteria: //android.widget.EditText[1]
20170510 13:45:10.462 : INFO : elements: [<appium.webdriver.webelement.WebElement (session="ec48b38a-9cbe-457d-94a0-dec662d3f9cb", element="1")>]
20170510 13:45:15.313 : INFO : Typing text '14' into text field 'xpath=//android.widget.EditText[2]'
20170510 13:45:15.313 : INFO : msg:find xpath=//android.widget.EditText[2]
20170510 13:45:15.313 : INFO : prefix: xpath
20170510 13:45:15.313 : INFO : criteria: //android.widget.EditText[2]
20170510 13:45:15.906 : INFO : elements: [<appium.webdriver.webelement.WebElement (session="ec48b38a-9cbe-457d-94a0-dec662d3f9cb", element="2")>]
20170510 13:45:21.307 : INFO : '計算'.
20170510 13:45:21.385 : INFO : Clicking element '計算'.
Ending test: RobotFrameworkTest1.TestSuite5.TestCase005
從上面的執行結果看,經過xpath=//android.widget.EditText[1] 定位到了第一個輸入框,經過xpath=//android.widget.EditText[2] 定位到了第二個輸入框。
示例3:經過accessibility_id的方式定位元素,accessibility_id對應到安卓APP後,其對應的屬性爲content-desc,這裏依舊用上面的APP界面爲示例,可是咱們對第一個EditText輸入框加入了content-desc屬性,以下圖所示。
Open Application http://localhost:4723/wd/hub platformName=Android platformVersion=22 deviceName=98YFBP522VSU app=C:/Users/yongqing/Desktop/app-debug.apk appPackage=com.example.calculator appActivity=MainActivity
Input Text accessibility_id=輸入框 23
Input Text id=com.example.calculator:id/factortwo 12
Click Button 計算
執行結果:
Starting test: RobotFrameworkTest1.TestSuite5.TestCase006
20170510 14:23:09.735 : INFO : Typing text '23' into text field 'accessibility_id=輸入框'
20170510 14:23:09.735 : INFO : msg:find accessibility_id=輸入框
20170510 14:23:16.573 : INFO : Typing text '12' into text field 'id=com.example.calculator:id/factortwo'
20170510 14:23:16.573 : INFO : msg:find id=com.example.calculator:id/factortwo
20170510 14:23:22.799 : INFO : '計算'.
20170510 14:23:22.901 : INFO : Clicking element '計算'.
Ending test: RobotFrameworkTest1.TestSuite5.TestCase006
從執行結果看,經過 accessibility_id=輸入框 也能夠定位到EditText輸入框。
【原文歸做者全部,歡迎轉載,可是保留版權】
Robot Framework自動化測試框架核心指南電子版試讀
相關博文彙總:
RobotFramework下的http接口自動化Create Http Context關鍵字的使用
RobotFramework下的http接口自動化Get關鍵字的使用
RobotFramework下的http接口自動化post關鍵字的使用
RobotFramework下的http接口自動化Get Response Body關鍵字的使用
RobotFramework下的http接口自動化Get Response Status 關鍵字的使用
RobotFramework下的http接口自動化Get Response header 關鍵字的使用
RobotFramework下的http接口自動化Set Request Header 關鍵字的使用
RobotFramework下HttpLibrary庫其它關鍵字
RobotFramework下的http接口自動化Set Request Body 關鍵字的使用
RobotFramework下的http接口自動化Follow Response關鍵字的使用
RobotFramework自動化測試框架的基礎關鍵字(一)
RobotFramework自動化測試框架的基礎關鍵字(二)
RobotFramework自動化測試框架的基礎關鍵字(三)
RobotFramework自動化測試框架的基礎關鍵字(四)
RobotFramework自動化測試框架的基礎關鍵字(五)
RobotFramework自動化測試框架-移動手機自動化測試AppiumLibrary介紹
RobotFramework自動化測試框架-移動手機自動化測試Open Application關鍵字的使用
RobotFramework自動化測試框架-經常使用斷言關鍵字
RobotFramework自動化測試框架-移動手機自動化測試AppiumLibrary庫其它的常見自動化關鍵字
RobotFramework自動化測試框架-移動手機自動化測試Input Text和Click Button關鍵字的使用
RobotFramework自動化測試框架-移動手機自動化測試Clear Text關鍵字的使用
RobotFramework自動化測試框架-移動手機自動化測試Click Element關鍵字的使用
RobotFramework自動化測試框架-移動手機自動化測試Click A Point關鍵字的使用
RobotFramework自動化測試框架-移動手機自動化測試Click Element At Coordinates關鍵字的使用
RobotFramework自動化測試框架-移動手機自動化測試Get Element Location關鍵字的使用
RobotFramework自動化測試框架-移動手機自動化測試Get Network Connection Status和Set Network Connection Status關鍵字的使用
RobotFramework自動化測試框架-移動手機自動化測試Element Attribute Should Match關鍵字的使用
RobotFramework自動化測試框架-DatabaseLibrary庫的使用(對數據庫的操做)
RobotFramework自動化測試框架-使用Python編寫自定義的RobotFramework Lib
RobotFramework自動化測試框架-Selenium Web自動化(-)-Open Browser和Close Browser